skypilot-nightly 1.0.0.dev20250422__tar.gz → 1.0.0.dev20250424__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 (426) hide show
  1. {skypilot_nightly-1.0.0.dev20250422/skypilot_nightly.egg-info → skypilot_nightly-1.0.0.dev20250424}/PKG-INFO +1 -1
  2. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/setup.py +1 -0
  3. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/__init__.py +2 -2
  4. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/backends/backend_utils.py +5 -1
  5. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/backends/wheel_utils.py +27 -1
  6. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/cli.py +10 -1
  7. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/client/cli.py +10 -1
  8. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/client/sdk.py +14 -1
  9. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/dag.py +5 -2
  10. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/dashboard/out/404.html +1 -1
  11. skypilot_nightly-1.0.0.dev20250424/sky/dashboard/out/_next/static/MqmRhu1oPMgLy6v25hibm/_buildManifest.js +1 -0
  12. skypilot_nightly-1.0.0.dev20250424/sky/dashboard/out/_next/static/chunks/236-2db3ee3fba33dd9e.js +6 -0
  13. skypilot_nightly-1.0.0.dev20250424/sky/dashboard/out/_next/static/chunks/37-0a572fe0dbb89c4d.js +6 -0
  14. skypilot_nightly-1.0.0.dev20250424/sky/dashboard/out/_next/static/chunks/845-9e60713e0c441abc.js +1 -0
  15. skypilot_nightly-1.0.0.dev20250424/sky/dashboard/out/_next/static/chunks/979-7bf73a4c7cea0f5c.js +1 -0
  16. skypilot_nightly-1.0.0.dev20250424/sky/dashboard/out/_next/static/chunks/pages/clusters/[cluster]/[job]-6ac338bc2239cb45.js +1 -0
  17. skypilot_nightly-1.0.0.dev20250424/sky/dashboard/out/_next/static/chunks/pages/clusters/[cluster]-f383db7389368ea7.js +1 -0
  18. skypilot_nightly-1.0.0.dev20250424/sky/dashboard/out/_next/static/chunks/pages/jobs/[job]-1c519e1afc523dc9.js +1 -0
  19. skypilot_nightly-1.0.0.dev20250424/sky/dashboard/out/_next/static/css/c6933bbb2ce7f4dd.css +3 -0
  20. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/dashboard/out/clusters/[cluster]/[job].html +1 -1
  21. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/dashboard/out/clusters/[cluster].html +1 -1
  22. skypilot_nightly-1.0.0.dev20250424/sky/dashboard/out/clusters.html +1 -0
  23. skypilot_nightly-1.0.0.dev20250424/sky/dashboard/out/favicon.ico +0 -0
  24. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/dashboard/out/index.html +1 -1
  25. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/dashboard/out/jobs/[job].html +1 -1
  26. skypilot_nightly-1.0.0.dev20250424/sky/dashboard/out/jobs.html +1 -0
  27. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/data/mounting_utils.py +15 -5
  28. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/execution.py +1 -1
  29. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/provision/aws/instance.py +2 -1
  30. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/server/common.py +62 -2
  31. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/server/constants.py +1 -1
  32. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/server/server.py +18 -12
  33. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/setup_files/setup.py +1 -0
  34. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/skylet/constants.py +12 -0
  35. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/task.py +12 -4
  36. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/utils/kubernetes/gpu_labeler.py +2 -1
  37. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424/skypilot_nightly.egg-info}/PKG-INFO +1 -1
  38. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/skypilot_nightly.egg-info/SOURCES.txt +11 -11
  39. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/tests/test_failover.py +7 -0
  40. skypilot_nightly-1.0.0.dev20250422/sky/dashboard/out/_next/static/2GsKhI8XKYj9B2969iIDf/_buildManifest.js +0 -1
  41. skypilot_nightly-1.0.0.dev20250422/sky/dashboard/out/_next/static/chunks/236-d437cf66e68a6f64.js +0 -6
  42. skypilot_nightly-1.0.0.dev20250422/sky/dashboard/out/_next/static/chunks/37-72fdc8f71d6e4784.js +0 -6
  43. skypilot_nightly-1.0.0.dev20250422/sky/dashboard/out/_next/static/chunks/845-2ea1cc63ba1f4067.js +0 -1
  44. skypilot_nightly-1.0.0.dev20250422/sky/dashboard/out/_next/static/chunks/979-7cd0778078b9cfad.js +0 -1
  45. skypilot_nightly-1.0.0.dev20250422/sky/dashboard/out/_next/static/chunks/pages/clusters/[cluster]/[job]-b09f7fbf6d5d74f6.js +0 -1
  46. skypilot_nightly-1.0.0.dev20250422/sky/dashboard/out/_next/static/chunks/pages/clusters/[cluster]-b57ec043f09c5813.js +0 -1
  47. skypilot_nightly-1.0.0.dev20250422/sky/dashboard/out/_next/static/chunks/pages/jobs/[job]-ef2e0e91a9222cac.js +0 -1
  48. skypilot_nightly-1.0.0.dev20250422/sky/dashboard/out/_next/static/css/f3538cd90cfca88c.css +0 -3
  49. skypilot_nightly-1.0.0.dev20250422/sky/dashboard/out/clusters.html +0 -1
  50. skypilot_nightly-1.0.0.dev20250422/sky/dashboard/out/jobs.html +0 -1
  51. skypilot_nightly-1.0.0.dev20250422/sky/jobs/dashboard/static/favicon.ico +0 -0
  52. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/LICENSE +0 -0
  53. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/MANIFEST.in +0 -0
  54. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/README.md +0 -0
  55. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/pyproject.toml +0 -0
  56. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/setup.cfg +0 -0
  57. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/adaptors/__init__.py +0 -0
  58. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/adaptors/aws.py +0 -0
  59. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/adaptors/azure.py +0 -0
  60. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/adaptors/cloudflare.py +0 -0
  61. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/adaptors/common.py +0 -0
  62. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/adaptors/cudo.py +0 -0
  63. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/adaptors/do.py +0 -0
  64. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/adaptors/docker.py +0 -0
  65. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/adaptors/gcp.py +0 -0
  66. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/adaptors/ibm.py +0 -0
  67. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/adaptors/kubernetes.py +0 -0
  68. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/adaptors/nebius.py +0 -0
  69. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/adaptors/oci.py +0 -0
  70. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/adaptors/runpod.py +0 -0
  71. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/adaptors/vast.py +0 -0
  72. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/adaptors/vsphere.py +0 -0
  73. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/admin_policy.py +0 -0
  74. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/authentication.py +0 -0
  75. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/backends/__init__.py +0 -0
  76. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/backends/backend.py +0 -0
  77. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/backends/cloud_vm_ray_backend.py +0 -0
  78. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/backends/docker_utils.py +0 -0
  79. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/backends/local_docker_backend.py +0 -0
  80. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/backends/monkey_patches/monkey_patch_ray_up.py +0 -0
  81. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/benchmark/__init__.py +0 -0
  82. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/benchmark/benchmark_state.py +0 -0
  83. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/benchmark/benchmark_utils.py +0 -0
  84. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/check.py +0 -0
  85. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/client/__init__.py +0 -0
  86. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/client/common.py +0 -0
  87. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/cloud_stores.py +0 -0
  88. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/clouds/__init__.py +0 -0
  89. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/clouds/aws.py +0 -0
  90. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/clouds/azure.py +0 -0
  91. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/clouds/cloud.py +0 -0
  92. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/clouds/cudo.py +0 -0
  93. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/clouds/do.py +0 -0
  94. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/clouds/fluidstack.py +0 -0
  95. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/clouds/gcp.py +0 -0
  96. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/clouds/ibm.py +0 -0
  97. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/clouds/kubernetes.py +0 -0
  98. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/clouds/lambda_cloud.py +0 -0
  99. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/clouds/nebius.py +0 -0
  100. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/clouds/oci.py +0 -0
  101. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/clouds/paperspace.py +0 -0
  102. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/clouds/runpod.py +0 -0
  103. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/clouds/scp.py +0 -0
  104. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/clouds/service_catalog/__init__.py +0 -0
  105. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/clouds/service_catalog/aws_catalog.py +0 -0
  106. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/clouds/service_catalog/azure_catalog.py +0 -0
  107. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/clouds/service_catalog/common.py +0 -0
  108. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/clouds/service_catalog/config.py +0 -0
  109. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/clouds/service_catalog/constants.py +0 -0
  110. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/clouds/service_catalog/cudo_catalog.py +0 -0
  111. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/clouds/service_catalog/data_fetchers/__init__.py +0 -0
  112. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/clouds/service_catalog/data_fetchers/fetch_aws.py +0 -0
  113. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/clouds/service_catalog/data_fetchers/fetch_azure.py +0 -0
  114. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/clouds/service_catalog/data_fetchers/fetch_cudo.py +0 -0
  115. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/clouds/service_catalog/data_fetchers/fetch_fluidstack.py +0 -0
  116. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/clouds/service_catalog/data_fetchers/fetch_gcp.py +0 -0
  117. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/clouds/service_catalog/data_fetchers/fetch_ibm.py +0 -0
  118. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/clouds/service_catalog/data_fetchers/fetch_lambda_cloud.py +0 -0
  119. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/clouds/service_catalog/data_fetchers/fetch_vast.py +0 -0
  120. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/clouds/service_catalog/data_fetchers/fetch_vsphere.py +0 -0
  121. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/clouds/service_catalog/do_catalog.py +0 -0
  122. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/clouds/service_catalog/fluidstack_catalog.py +0 -0
  123. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/clouds/service_catalog/gcp_catalog.py +0 -0
  124. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/clouds/service_catalog/ibm_catalog.py +0 -0
  125. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/clouds/service_catalog/kubernetes_catalog.py +0 -0
  126. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/clouds/service_catalog/lambda_catalog.py +0 -0
  127. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/clouds/service_catalog/nebius_catalog.py +0 -0
  128. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/clouds/service_catalog/oci_catalog.py +0 -0
  129. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/clouds/service_catalog/paperspace_catalog.py +0 -0
  130. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/clouds/service_catalog/runpod_catalog.py +0 -0
  131. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/clouds/service_catalog/scp_catalog.py +0 -0
  132. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/clouds/service_catalog/vast_catalog.py +0 -0
  133. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/clouds/service_catalog/vsphere_catalog.py +0 -0
  134. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/clouds/utils/__init__.py +0 -0
  135. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/clouds/utils/aws_utils.py +0 -0
  136. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/clouds/utils/azure_utils.py +0 -0
  137. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/clouds/utils/gcp_utils.py +0 -0
  138. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/clouds/utils/oci_utils.py +0 -0
  139. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/clouds/utils/scp_utils.py +0 -0
  140. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/clouds/vast.py +0 -0
  141. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/clouds/vsphere.py +0 -0
  142. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/core.py +0 -0
  143. {skypilot_nightly-1.0.0.dev20250422/sky/dashboard/out/_next/static/2GsKhI8XKYj9B2969iIDf → skypilot_nightly-1.0.0.dev20250424/sky/dashboard/out/_next/static/MqmRhu1oPMgLy6v25hibm}/_ssgManifest.js +0 -0
  144. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/dashboard/out/_next/static/chunks/312-c3c8845990db8ffc.js +0 -0
  145. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/dashboard/out/_next/static/chunks/678-206dddca808e6d16.js +0 -0
  146. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/dashboard/out/_next/static/chunks/fd9d1056-2821b0f0cabcd8bd.js +0 -0
  147. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/dashboard/out/_next/static/chunks/framework-87d061ee6ed71b28.js +0 -0
  148. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/dashboard/out/_next/static/chunks/main-app-241eb28595532291.js +0 -0
  149. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/dashboard/out/_next/static/chunks/main-e0e2335212e72357.js +0 -0
  150. /skypilot_nightly-1.0.0.dev20250422/sky/dashboard/out/_next/static/chunks/pages/_app-3001e84c61acddfb.js → /skypilot_nightly-1.0.0.dev20250424/sky/dashboard/out/_next/static/chunks/pages/_app-e6b013bc3f77ad60.js +0 -0
  151. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/dashboard/out/_next/static/chunks/pages/_error-1be831200e60c5c0.js +0 -0
  152. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/dashboard/out/_next/static/chunks/pages/clusters-a93b93e10b8b074e.js +0 -0
  153. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/dashboard/out/_next/static/chunks/pages/index-f9f039532ca8cbc4.js +0 -0
  154. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/dashboard/out/_next/static/chunks/pages/jobs-a75029b67aab6a2e.js +0 -0
  155. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/dashboard/out/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js +0 -0
  156. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/dashboard/out/_next/static/chunks/webpack-830f59b8404e96b8.js +0 -0
  157. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/dashboard/out/skypilot.svg +0 -0
  158. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/dashboard/out/videos/cursor-small.mp4 +0 -0
  159. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/data/__init__.py +0 -0
  160. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/data/data_transfer.py +0 -0
  161. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/data/data_utils.py +0 -0
  162. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/data/storage.py +0 -0
  163. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/data/storage_utils.py +0 -0
  164. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/exceptions.py +0 -0
  165. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/global_user_state.py +0 -0
  166. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/jobs/__init__.py +0 -0
  167. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/jobs/client/__init__.py +0 -0
  168. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/jobs/client/sdk.py +0 -0
  169. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/jobs/constants.py +0 -0
  170. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/jobs/controller.py +0 -0
  171. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/jobs/dashboard/dashboard.py +0 -0
  172. {skypilot_nightly-1.0.0.dev20250422/sky/dashboard/out → skypilot_nightly-1.0.0.dev20250424/sky/jobs/dashboard/static}/favicon.ico +0 -0
  173. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/jobs/dashboard/templates/index.html +0 -0
  174. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/jobs/recovery_strategy.py +0 -0
  175. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/jobs/scheduler.py +0 -0
  176. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/jobs/server/__init__.py +0 -0
  177. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/jobs/server/core.py +0 -0
  178. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/jobs/server/dashboard_utils.py +0 -0
  179. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/jobs/server/server.py +0 -0
  180. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/jobs/state.py +0 -0
  181. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/jobs/utils.py +0 -0
  182. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/models.py +0 -0
  183. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/optimizer.py +0 -0
  184. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/provision/__init__.py +0 -0
  185. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/provision/aws/__init__.py +0 -0
  186. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/provision/aws/config.py +0 -0
  187. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/provision/aws/utils.py +0 -0
  188. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/provision/azure/__init__.py +0 -0
  189. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/provision/azure/azure-config-template.json +0 -0
  190. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/provision/azure/config.py +0 -0
  191. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/provision/azure/instance.py +0 -0
  192. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/provision/common.py +0 -0
  193. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/provision/constants.py +0 -0
  194. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/provision/cudo/__init__.py +0 -0
  195. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/provision/cudo/config.py +0 -0
  196. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/provision/cudo/cudo_machine_type.py +0 -0
  197. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/provision/cudo/cudo_utils.py +0 -0
  198. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/provision/cudo/cudo_wrapper.py +0 -0
  199. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/provision/cudo/instance.py +0 -0
  200. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/provision/do/__init__.py +0 -0
  201. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/provision/do/config.py +0 -0
  202. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/provision/do/constants.py +0 -0
  203. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/provision/do/instance.py +0 -0
  204. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/provision/do/utils.py +0 -0
  205. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/provision/docker_utils.py +0 -0
  206. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/provision/fluidstack/__init__.py +0 -0
  207. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/provision/fluidstack/config.py +0 -0
  208. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/provision/fluidstack/fluidstack_utils.py +0 -0
  209. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/provision/fluidstack/instance.py +0 -0
  210. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/provision/gcp/__init__.py +0 -0
  211. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/provision/gcp/config.py +0 -0
  212. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/provision/gcp/constants.py +0 -0
  213. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/provision/gcp/instance.py +0 -0
  214. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/provision/gcp/instance_utils.py +0 -0
  215. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/provision/gcp/mig_utils.py +0 -0
  216. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/provision/instance_setup.py +0 -0
  217. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/provision/kubernetes/__init__.py +0 -0
  218. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/provision/kubernetes/config.py +0 -0
  219. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/provision/kubernetes/constants.py +0 -0
  220. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/provision/kubernetes/instance.py +0 -0
  221. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/provision/kubernetes/manifests/fusermount-server-daemonset.yaml +0 -0
  222. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/provision/kubernetes/network.py +0 -0
  223. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/provision/kubernetes/network_utils.py +0 -0
  224. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/provision/kubernetes/utils.py +0 -0
  225. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/provision/lambda_cloud/__init__.py +0 -0
  226. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/provision/lambda_cloud/config.py +0 -0
  227. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/provision/lambda_cloud/instance.py +0 -0
  228. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/provision/lambda_cloud/lambda_utils.py +0 -0
  229. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/provision/logging.py +0 -0
  230. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/provision/metadata_utils.py +0 -0
  231. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/provision/nebius/__init__.py +0 -0
  232. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/provision/nebius/config.py +0 -0
  233. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/provision/nebius/instance.py +0 -0
  234. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/provision/nebius/utils.py +0 -0
  235. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/provision/oci/__init__.py +0 -0
  236. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/provision/oci/config.py +0 -0
  237. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/provision/oci/instance.py +0 -0
  238. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/provision/oci/query_utils.py +0 -0
  239. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/provision/paperspace/__init__.py +0 -0
  240. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/provision/paperspace/config.py +0 -0
  241. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/provision/paperspace/constants.py +0 -0
  242. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/provision/paperspace/instance.py +0 -0
  243. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/provision/paperspace/utils.py +0 -0
  244. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/provision/provisioner.py +0 -0
  245. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/provision/runpod/__init__.py +0 -0
  246. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/provision/runpod/api/__init__.py +0 -0
  247. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/provision/runpod/api/commands.py +0 -0
  248. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/provision/runpod/api/pods.py +0 -0
  249. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/provision/runpod/config.py +0 -0
  250. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/provision/runpod/instance.py +0 -0
  251. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/provision/runpod/utils.py +0 -0
  252. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/provision/vast/__init__.py +0 -0
  253. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/provision/vast/config.py +0 -0
  254. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/provision/vast/instance.py +0 -0
  255. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/provision/vast/utils.py +0 -0
  256. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/provision/vsphere/__init__.py +0 -0
  257. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/provision/vsphere/common/__init__.py +0 -0
  258. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/provision/vsphere/common/cls_api_client.py +0 -0
  259. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/provision/vsphere/common/cls_api_helper.py +0 -0
  260. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/provision/vsphere/common/custom_script.py +0 -0
  261. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/provision/vsphere/common/id_generator.py +0 -0
  262. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/provision/vsphere/common/metadata_utils.py +0 -0
  263. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/provision/vsphere/common/service_manager.py +0 -0
  264. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/provision/vsphere/common/service_manager_factory.py +0 -0
  265. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/provision/vsphere/common/ssl_helper.py +0 -0
  266. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/provision/vsphere/common/vapiconnect.py +0 -0
  267. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/provision/vsphere/common/vim_utils.py +0 -0
  268. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/provision/vsphere/config.py +0 -0
  269. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/provision/vsphere/instance.py +0 -0
  270. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/provision/vsphere/vsphere_utils.py +0 -0
  271. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/resources.py +0 -0
  272. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/serve/__init__.py +0 -0
  273. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/serve/autoscalers.py +0 -0
  274. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/serve/client/__init__.py +0 -0
  275. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/serve/client/sdk.py +0 -0
  276. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/serve/constants.py +0 -0
  277. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/serve/controller.py +0 -0
  278. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/serve/load_balancer.py +0 -0
  279. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/serve/load_balancing_policies.py +0 -0
  280. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/serve/replica_managers.py +0 -0
  281. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/serve/serve_state.py +0 -0
  282. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/serve/serve_utils.py +0 -0
  283. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/serve/server/__init__.py +0 -0
  284. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/serve/server/core.py +0 -0
  285. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/serve/server/server.py +0 -0
  286. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/serve/service.py +0 -0
  287. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/serve/service_spec.py +0 -0
  288. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/serve/spot_placer.py +0 -0
  289. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/server/__init__.py +0 -0
  290. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/server/html/log.html +0 -0
  291. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/server/requests/__init__.py +0 -0
  292. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/server/requests/event_loop.py +0 -0
  293. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/server/requests/executor.py +0 -0
  294. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/server/requests/payloads.py +0 -0
  295. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/server/requests/preconditions.py +0 -0
  296. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/server/requests/process.py +0 -0
  297. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/server/requests/queues/__init__.py +0 -0
  298. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/server/requests/queues/local_queue.py +0 -0
  299. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/server/requests/queues/mp_queue.py +0 -0
  300. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/server/requests/requests.py +0 -0
  301. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/server/requests/serializers/__init__.py +0 -0
  302. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/server/requests/serializers/decoders.py +0 -0
  303. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/server/requests/serializers/encoders.py +0 -0
  304. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/server/stream_utils.py +0 -0
  305. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/server/uvicorn.py +0 -0
  306. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/setup_files/MANIFEST.in +0 -0
  307. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/setup_files/dependencies.py +0 -0
  308. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/sky_logging.py +0 -0
  309. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/skylet/LICENSE +0 -0
  310. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/skylet/__init__.py +0 -0
  311. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/skylet/attempt_skylet.py +0 -0
  312. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/skylet/autostop_lib.py +0 -0
  313. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/skylet/configs.py +0 -0
  314. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/skylet/events.py +0 -0
  315. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/skylet/job_lib.py +0 -0
  316. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/skylet/log_lib.py +0 -0
  317. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/skylet/log_lib.pyi +0 -0
  318. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/skylet/providers/__init__.py +0 -0
  319. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/skylet/providers/command_runner.py +0 -0
  320. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/skylet/providers/ibm/__init__.py +0 -0
  321. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/skylet/providers/ibm/node_provider.py +0 -0
  322. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/skylet/providers/ibm/utils.py +0 -0
  323. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/skylet/providers/ibm/vpc_provider.py +0 -0
  324. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/skylet/providers/scp/__init__.py +0 -0
  325. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/skylet/providers/scp/config.py +0 -0
  326. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/skylet/providers/scp/node_provider.py +0 -0
  327. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/skylet/ray_patches/__init__.py +0 -0
  328. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/skylet/ray_patches/autoscaler.py.patch +0 -0
  329. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/skylet/ray_patches/cli.py.patch +0 -0
  330. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/skylet/ray_patches/command_runner.py.patch +0 -0
  331. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/skylet/ray_patches/log_monitor.py.patch +0 -0
  332. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/skylet/ray_patches/resource_demand_scheduler.py.patch +0 -0
  333. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/skylet/ray_patches/updater.py.patch +0 -0
  334. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/skylet/ray_patches/worker.py.patch +0 -0
  335. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/skylet/skylet.py +0 -0
  336. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/skylet/subprocess_daemon.py +0 -0
  337. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/skypilot_config.py +0 -0
  338. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/templates/aws-ray.yml.j2 +0 -0
  339. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/templates/azure-ray.yml.j2 +0 -0
  340. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/templates/cudo-ray.yml.j2 +0 -0
  341. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/templates/do-ray.yml.j2 +0 -0
  342. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/templates/fluidstack-ray.yml.j2 +0 -0
  343. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/templates/gcp-ray.yml.j2 +0 -0
  344. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/templates/ibm-ray.yml.j2 +0 -0
  345. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/templates/jobs-controller.yaml.j2 +0 -0
  346. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/templates/kubernetes-ingress.yml.j2 +0 -0
  347. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/templates/kubernetes-loadbalancer.yml.j2 +0 -0
  348. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/templates/kubernetes-port-forward-proxy-command.sh +0 -0
  349. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/templates/kubernetes-ray.yml.j2 +0 -0
  350. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/templates/kubernetes-ssh-jump.yml.j2 +0 -0
  351. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/templates/lambda-ray.yml.j2 +0 -0
  352. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/templates/local-ray.yml.j2 +0 -0
  353. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/templates/nebius-ray.yml.j2 +0 -0
  354. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/templates/oci-ray.yml.j2 +0 -0
  355. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/templates/paperspace-ray.yml.j2 +0 -0
  356. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/templates/runpod-ray.yml.j2 +0 -0
  357. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/templates/scp-ray.yml.j2 +0 -0
  358. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/templates/sky-serve-controller.yaml.j2 +0 -0
  359. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/templates/skypilot-server-kubernetes-proxy.sh +0 -0
  360. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/templates/vast-ray.yml.j2 +0 -0
  361. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/templates/vsphere-ray.yml.j2 +0 -0
  362. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/templates/websocket_proxy.py +0 -0
  363. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/usage/__init__.py +0 -0
  364. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/usage/constants.py +0 -0
  365. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/usage/usage_lib.py +0 -0
  366. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/utils/__init__.py +0 -0
  367. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/utils/accelerator_registry.py +0 -0
  368. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/utils/admin_policy_utils.py +0 -0
  369. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/utils/annotations.py +0 -0
  370. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/utils/atomic.py +0 -0
  371. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/utils/cli_utils/__init__.py +0 -0
  372. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/utils/cli_utils/status_utils.py +0 -0
  373. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/utils/cluster_utils.py +0 -0
  374. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/utils/command_runner.py +0 -0
  375. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/utils/command_runner.pyi +0 -0
  376. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/utils/common.py +0 -0
  377. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/utils/common_utils.py +0 -0
  378. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/utils/config_utils.py +0 -0
  379. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/utils/control_master_utils.py +0 -0
  380. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/utils/controller_utils.py +0 -0
  381. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/utils/dag_utils.py +0 -0
  382. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/utils/db_utils.py +0 -0
  383. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/utils/env_options.py +0 -0
  384. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/utils/kubernetes/__init__.py +0 -0
  385. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/utils/kubernetes/create_cluster.sh +0 -0
  386. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/utils/kubernetes/delete_cluster.sh +0 -0
  387. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/utils/kubernetes/deploy_remote_cluster.sh +0 -0
  388. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/utils/kubernetes/exec_kubeconfig_converter.py +0 -0
  389. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/utils/kubernetes/generate_kind_config.py +0 -0
  390. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/utils/kubernetes/generate_kubeconfig.sh +0 -0
  391. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/utils/kubernetes/k8s_gpu_labeler_job.yaml +0 -0
  392. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/utils/kubernetes/k8s_gpu_labeler_setup.yaml +0 -0
  393. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/utils/kubernetes/kubernetes_deploy_utils.py +0 -0
  394. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/utils/kubernetes/rsync_helper.sh +0 -0
  395. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/utils/kubernetes/ssh_jump_lifecycle_manager.py +0 -0
  396. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/utils/kubernetes_enums.py +0 -0
  397. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/utils/log_utils.py +0 -0
  398. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/utils/message_utils.py +0 -0
  399. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/utils/registry.py +0 -0
  400. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/utils/resources_utils.py +0 -0
  401. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/utils/rich_console_utils.py +0 -0
  402. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/utils/rich_utils.py +0 -0
  403. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/utils/schemas.py +0 -0
  404. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/utils/status_lib.py +0 -0
  405. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/utils/subprocess_utils.py +0 -0
  406. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/utils/timeline.py +0 -0
  407. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/utils/ux_utils.py +0 -0
  408. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/sky/utils/validator.py +0 -0
  409. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/skypilot_nightly.egg-info/dependency_links.txt +0 -0
  410. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/skypilot_nightly.egg-info/entry_points.txt +0 -0
  411. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/skypilot_nightly.egg-info/requires.txt +0 -0
  412. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/skypilot_nightly.egg-info/top_level.txt +0 -0
  413. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/tests/test_api.py +0 -0
  414. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/tests/test_cli.py +0 -0
  415. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/tests/test_config.py +0 -0
  416. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/tests/test_global_user_state.py +0 -0
  417. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/tests/test_jobs.py +0 -0
  418. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/tests/test_jobs_and_serve.py +0 -0
  419. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/tests/test_list_accelerators.py +0 -0
  420. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/tests/test_optimizer_dryruns.py +0 -0
  421. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/tests/test_optimizer_random_dag.py +0 -0
  422. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/tests/test_serve_autoscaler.py +0 -0
  423. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/tests/test_smoke.py +0 -0
  424. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/tests/test_storage.py +0 -0
  425. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/tests/test_wheels.py +0 -0
  426. {skypilot_nightly-1.0.0.dev20250422 → skypilot_nightly-1.0.0.dev20250424}/tests/test_yaml_parser.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: skypilot-nightly
3
- Version: 1.0.0.dev20250422
3
+ Version: 1.0.0.dev20250424
4
4
  Summary: SkyPilot: An intercloud broker for the clouds
5
5
  Author: SkyPilot Team
6
6
  License: Apache 2.0
@@ -45,6 +45,7 @@ original_init_content = None
45
45
  system = platform.system()
46
46
 
47
47
 
48
+ # Keep in sync with sky/server/common.py get_skypilot_version_on_disk()
48
49
  def find_version():
49
50
  # Extract version information from filepath
50
51
  # Adapted from:
@@ -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 = '69aebc34b3963a1a8d4026e68b3cffd86347c1e2'
8
+ _SKYPILOT_COMMIT_SHA = '3d993746d92a6d4cc8802156663bce1a4bf15b92'
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.dev20250422'
38
+ __version__ = '1.0.0.dev20250424'
39
39
  __root_dir__ = os.path.dirname(os.path.abspath(__file__))
40
40
 
41
41
 
@@ -702,6 +702,8 @@ def write_cluster_config(
702
702
  # to use, which is likely to already have a conda environment activated.
703
703
  conda_auto_activate = ('true' if to_provision.extract_docker_image() is None
704
704
  else 'false')
705
+ is_custom_docker = ('true' if to_provision.extract_docker_image()
706
+ is not None else 'false')
705
707
 
706
708
  # Use a tmp file path to avoid incomplete YAML file being re-used in the
707
709
  # future.
@@ -741,7 +743,9 @@ def write_cluster_config(
741
743
  # syntax.
742
744
  'conda_installation_commands':
743
745
  constants.CONDA_INSTALLATION_COMMANDS.replace(
744
- '{conda_auto_activate}', conda_auto_activate),
746
+ '{conda_auto_activate}',
747
+ conda_auto_activate).replace('{is_custom_docker}',
748
+ is_custom_docker),
745
749
  'ray_skypilot_installation_commands':
746
750
  (constants.RAY_SKYPILOT_INSTALLATION_COMMANDS.replace(
747
751
  '{sky_wheel_hash}',
@@ -19,12 +19,14 @@ import subprocess
19
19
  import tempfile
20
20
  from typing import Optional, Tuple
21
21
 
22
+ import colorama
22
23
  import filelock
23
24
  from packaging import version
24
25
 
25
26
  import sky
26
27
  from sky import sky_logging
27
28
  from sky.backends import backend_utils
29
+ from sky.server import common
28
30
 
29
31
  logger = sky_logging.init_logger(__name__)
30
32
 
@@ -60,6 +62,30 @@ def _get_latest_wheel() -> pathlib.Path:
60
62
 
61
63
  def _build_sky_wheel() -> pathlib.Path:
62
64
  """Build a wheel for SkyPilot and return the path to the wheel."""
65
+ # Double check that the installed code is actually the same version as the
66
+ # running code. If not, the wheel we build will not match _WHEEL_PATTERN.
67
+ # See https://github.com/skypilot-org/skypilot/issues/5311.
68
+ version_on_disk = common.get_skypilot_version_on_disk()
69
+ if version_on_disk != sky.__version__:
70
+ logger.warning(
71
+ 'Wheel build: The installed SkyPilot version is different from the '
72
+ 'running code.\n'
73
+ f'{colorama.Style.DIM}'
74
+ f'running version: {sky.__version__}\n'
75
+ f'installed version: {version_on_disk}\n'
76
+ f'{colorama.Style.RESET_ALL}'
77
+ # The following message only applies to local API server. We have no
78
+ # way to tell from here if this is a remote or local API server. But
79
+ # we expect this to happen much more commonly to a local API server,
80
+ # so just print the hint regardless.
81
+ f'{colorama.Fore.YELLOW}'
82
+ 'Please restart the local API server by running:\n'
83
+ f'{colorama.Style.BRIGHT}sky api stop; sky api start'
84
+ f'{colorama.Style.RESET_ALL}')
85
+ raise RuntimeError('The installed SkyPilot version is different from '
86
+ 'the running code. Please restart the SkyPilot API '
87
+ 'server with: sky api stop; sky api start')
88
+
63
89
  with tempfile.TemporaryDirectory() as tmp_dir_str:
64
90
  # prepare files
65
91
  tmp_dir = pathlib.Path(tmp_dir_str)
@@ -126,7 +152,7 @@ def _build_sky_wheel() -> pathlib.Path:
126
152
  raise RuntimeError(
127
153
  f'Failed to find pip wheel for SkyPilot under {tmp_dir} with '
128
154
  f'glob pattern {_WHEEL_PATTERN!r}. '
129
- f'Found: {list(map(str, tmp_dir.glob("*")))}.'
155
+ f'Found: {list(map(str, tmp_dir.glob("*")))}. '
130
156
  'No wheel file is generated.') from None
131
157
 
132
158
  # Use a unique temporary dir per wheel hash, because there may be many
@@ -4271,6 +4271,14 @@ def jobs_dashboard():
4271
4271
  managed_jobs.dashboard()
4272
4272
 
4273
4273
 
4274
+ @cli.command(cls=_DocumentedCodeCommand)
4275
+ @config_option(expose_value=False)
4276
+ @usage_lib.entrypoint
4277
+ def dashboard() -> None:
4278
+ """Starts the dashboard for skypilot."""
4279
+ sdk.dashboard()
4280
+
4281
+
4274
4282
  @cli.group(cls=_NaturalOrderGroup)
4275
4283
  def serve():
4276
4284
  """SkyServe CLI (multi-region, multi-cloud serving)."""
@@ -5902,7 +5910,8 @@ def api_info():
5902
5910
  api_server_info = sdk.api_info()
5903
5911
  user_name = os.getenv(constants.USER_ENV_VAR, getpass.getuser())
5904
5912
  user_hash = common_utils.get_user_hash()
5905
- click.echo(f'Using SkyPilot API server: {url}\n'
5913
+ dashboard_url = f'{url}/dashboard'
5914
+ click.echo(f'Using SkyPilot API server: {url} Dashboard: {dashboard_url}\n'
5906
5915
  f'{ux_utils.INDENT_SYMBOL}Status: {api_server_info["status"]}, '
5907
5916
  f'commit: {api_server_info["commit"]}, '
5908
5917
  f'version: {api_server_info["version"]}\n'
@@ -4271,6 +4271,14 @@ def jobs_dashboard():
4271
4271
  managed_jobs.dashboard()
4272
4272
 
4273
4273
 
4274
+ @cli.command(cls=_DocumentedCodeCommand)
4275
+ @config_option(expose_value=False)
4276
+ @usage_lib.entrypoint
4277
+ def dashboard() -> None:
4278
+ """Starts the dashboard for skypilot."""
4279
+ sdk.dashboard()
4280
+
4281
+
4274
4282
  @cli.group(cls=_NaturalOrderGroup)
4275
4283
  def serve():
4276
4284
  """SkyServe CLI (multi-region, multi-cloud serving)."""
@@ -5902,7 +5910,8 @@ def api_info():
5902
5910
  api_server_info = sdk.api_info()
5903
5911
  user_name = os.getenv(constants.USER_ENV_VAR, getpass.getuser())
5904
5912
  user_hash = common_utils.get_user_hash()
5905
- click.echo(f'Using SkyPilot API server: {url}\n'
5913
+ dashboard_url = f'{url}/dashboard'
5914
+ click.echo(f'Using SkyPilot API server: {url} Dashboard: {dashboard_url}\n'
5906
5915
  f'{ux_utils.INDENT_SYMBOL}Status: {api_server_info["status"]}, '
5907
5916
  f'commit: {api_server_info["commit"]}, '
5908
5917
  f'version: {api_server_info["version"]}\n'
@@ -18,6 +18,7 @@ import pathlib
18
18
  import subprocess
19
19
  import typing
20
20
  from typing import Any, Dict, List, Optional, Tuple, Union
21
+ import webbrowser
21
22
 
22
23
  import click
23
24
  import colorama
@@ -294,6 +295,17 @@ def validate(
294
295
  response.json().get('detail'))
295
296
 
296
297
 
298
+ @usage_lib.entrypoint
299
+ @server_common.check_server_healthy_or_start
300
+ @annotations.client_api
301
+ def dashboard() -> None:
302
+ """Starts the dashboard for SkyPilot."""
303
+ api_server_url = server_common.get_server_url()
304
+ url = f'{api_server_url}/dashboard'
305
+ logger.info(f'Opening dashboard in browser: {url}')
306
+ webbrowser.open(url)
307
+
308
+
297
309
  @usage_lib.entrypoint
298
310
  @server_common.check_server_healthy_or_start
299
311
  @annotations.client_api
@@ -1713,8 +1725,9 @@ def api_start(
1713
1725
  if foreground:
1714
1726
  # Explain why current process exited
1715
1727
  logger.info('API server is already running:')
1728
+ dashboard_msg = f'Dashboard: {server_common.get_server_url(host)}/dashboard'
1716
1729
  logger.info(f'{ux_utils.INDENT_SYMBOL}SkyPilot API server: '
1717
- f'{server_common.get_server_url(host)}\n'
1730
+ f'{server_common.get_server_url(host)} {dashboard_msg}\n'
1718
1731
  f'{ux_utils.INDENT_LAST_SYMBOL}'
1719
1732
  f'View API server logs at: {constants.API_SERVER_LOGS}')
1720
1733
 
@@ -76,9 +76,12 @@ class Dag:
76
76
 
77
77
  return out_degree_condition and in_degree_condition
78
78
 
79
- def validate(self, workdir_only: bool = False):
79
+ def validate(self,
80
+ skip_file_mounts: bool = False,
81
+ skip_workdir: bool = False):
80
82
  for task in self.tasks:
81
- task.validate(workdir_only=workdir_only)
83
+ task.validate(skip_file_mounts=skip_file_mounts,
84
+ skip_workdir=skip_workdir)
82
85
 
83
86
 
84
87
  class _DagContext(threading.local):
@@ -1 +1 @@
1
- <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><title>404: This page could not be found</title><meta name="next-head-count" content="3"/><link rel="preload" href="/dashboard/_next/static/css/f3538cd90cfca88c.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/f3538cd90cfca88c.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-830f59b8404e96b8.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-87d061ee6ed71b28.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-e0e2335212e72357.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-3001e84c61acddfb.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_error-1be831200e60c5c0.js" defer=""></script><script src="/dashboard/_next/static/2GsKhI8XKYj9B2969iIDf/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/2GsKhI8XKYj9B2969iIDf/_ssgManifest.js" defer=""></script></head><body><div id="__next"><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div style="line-height:48px"><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding-right:23px;font-size:24px;font-weight:500;vertical-align:top">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:28px">This page could not be found<!-- -->.</h2></div></div></div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{"statusCode":404}},"page":"/_error","query":{},"buildId":"2GsKhI8XKYj9B2969iIDf","assetPrefix":"/dashboard","nextExport":true,"isFallback":false,"gip":true,"scriptLoader":[]}</script></body></html>
1
+ <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><title>404: This page could not be found</title><meta name="next-head-count" content="3"/><link rel="preload" href="/dashboard/_next/static/css/c6933bbb2ce7f4dd.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/c6933bbb2ce7f4dd.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-830f59b8404e96b8.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-87d061ee6ed71b28.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-e0e2335212e72357.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-e6b013bc3f77ad60.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_error-1be831200e60c5c0.js" defer=""></script><script src="/dashboard/_next/static/MqmRhu1oPMgLy6v25hibm/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/MqmRhu1oPMgLy6v25hibm/_ssgManifest.js" defer=""></script></head><body><div id="__next"><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div style="line-height:48px"><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding-right:23px;font-size:24px;font-weight:500;vertical-align:top">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:28px">This page could not be found<!-- -->.</h2></div></div></div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{"statusCode":404}},"page":"/_error","query":{},"buildId":"MqmRhu1oPMgLy6v25hibm","assetPrefix":"/dashboard","nextExport":true,"isFallback":false,"gip":true,"scriptLoader":[]}</script></body></html>
@@ -0,0 +1 @@
1
+ self.__BUILD_MANIFEST=function(s,c,e,t,a,b){return{__rewrites:{afterFiles:[],beforeFiles:[],fallback:[]},"/":["static/chunks/pages/index-f9f039532ca8cbc4.js"],"/_error":["static/chunks/pages/_error-1be831200e60c5c0.js"],"/clusters":[s,e,c,t,a,"static/chunks/pages/clusters-a93b93e10b8b074e.js"],"/clusters/[cluster]":[s,e,c,t,b,a,"static/chunks/pages/clusters/[cluster]-f383db7389368ea7.js"],"/clusters/[cluster]/[job]":[s,c,"static/chunks/pages/clusters/[cluster]/[job]-6ac338bc2239cb45.js"],"/jobs":[s,e,c,t,b,"static/chunks/pages/jobs-a75029b67aab6a2e.js"],"/jobs/[job]":[s,c,"static/chunks/pages/jobs/[job]-1c519e1afc523dc9.js"],sortedPages:["/","/_app","/_error","/clusters","/clusters/[cluster]","/clusters/[cluster]/[job]","/jobs","/jobs/[job]"]}}("static/chunks/678-206dddca808e6d16.js","static/chunks/979-7bf73a4c7cea0f5c.js","static/chunks/312-c3c8845990db8ffc.js","static/chunks/845-9e60713e0c441abc.js","static/chunks/37-0a572fe0dbb89c4d.js","static/chunks/236-2db3ee3fba33dd9e.js"),self.__BUILD_MANIFEST_CB&&self.__BUILD_MANIFEST_CB();
@@ -0,0 +1,6 @@
1
+ "use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[236],{8236:function(e,s,t){t.d(s,{L4:function(){return E},Nk:function(){return C}});var n=t(5893),r=t(7294),a=t(1163),l=t(1664),i=t.n(l),c=t(8799),o=t(803),d=t(7673),h=t(8764),u=t(7469),x=t(8969),m=t(3266),j=t(9470),p=t(3626),f=t(998);/**
2
+ * @license lucide-react v0.407.0 - ISC
3
+ *
4
+ * This source code is licensed under the ISC license.
5
+ * See the LICENSE file in the root directory of this source tree.
6
+ */let g=(0,f.Z)("RefreshCcw",[["path",{d:"M21 12a9 9 0 0 0-9-9 9.75 9.75 0 0 0-6.74 2.74L3 8",key:"14sxne"}],["path",{d:"M3 3v5h5",key:"1xhq8a"}],["path",{d:"M3 12a9 9 0 0 0 9 9 9.75 9.75 0 0 0 6.74-2.74L21 16",key:"1hlbsb"}],["path",{d:"M16 16h5v5",key:"ccwih5"}]]),b=(0,f.Z)("FileSearch",[["path",{d:"M14 2v4a2 2 0 0 0 2 2h4",key:"tnqrlb"}],["path",{d:"M4.268 21a2 2 0 0 0 1.727 1H18a2 2 0 0 0 2-2V7l-5-5H6a2 2 0 0 0-2 2v3",key:"ms7g94"}],["path",{d:"m9 18-1.5-1.5",key:"1j6qii"}],["circle",{cx:"5",cy:"14",r:"3",key:"ufru5t"}]]),N=(0,f.Z)("MonitorPlay",[["path",{d:"M10 7.75a.75.75 0 0 1 1.142-.638l3.664 2.249a.75.75 0 0 1 0 1.278l-3.664 2.25a.75.75 0 0 1-1.142-.64z",key:"1pctta"}],["path",{d:"M12 17v4",key:"1riwvh"}],["path",{d:"M8 21h8",key:"1ev6f3"}],["rect",{x:"2",y:"3",width:"20",height:"14",rx:"2",key:"x3v2xh"}]]);var y=t(1266),w=t(4545),v=t(9307),k=t(3001);function C(){let[e,s]=(0,r.useState)(!1),t=r.useRef(null),[a,l]=(0,r.useState)({isOpen:!1,title:"",message:"",onConfirm:null}),d=(0,k.X)();return(0,n.jsxs)(j.A,{highlighted:"jobs",children:[(0,n.jsxs)("div",{className:"flex items-center justify-between mb-4 h-5",children:[(0,n.jsx)("div",{className:"text-base",children:(0,n.jsx)(i(),{href:"/jobs",className:"text-sky-blue hover:underline leading-none",children:"Managed Jobs"})}),(0,n.jsxs)("div",{className:"flex items-center space-x-2",children:[e&&(0,n.jsxs)("div",{className:"flex items-center mr-2",children:[(0,n.jsx)(c.Z,{size:15,className:"mt-0"}),(0,n.jsx)("span",{className:"ml-2 text-gray-500 text-sm",children:"Loading..."})]}),(0,n.jsxs)(o.z,{variant:"ghost",size:"sm",onClick:()=>{t.current&&t.current()},disabled:e,className:"text-sky-blue hover:text-sky-blue-bright",title:"Refresh",children:[(0,n.jsx)(p.Z,{className:"h-4 w-4 mr-1.5"}),!d&&(0,n.jsx)("span",{children:"Refresh"})]})]})]}),(0,n.jsx)(S,{refreshInterval:2e4,setLoading:s,refreshDataRef:t}),(0,n.jsx)(y.cV,{isOpen:a.isOpen,onClose:()=>l({...a,isOpen:!1}),onConfirm:a.onConfirm,title:a.title,message:a.message})]})}function S(e){let{refreshInterval:s,setLoading:t,refreshDataRef:a}=e,[l,j]=(0,r.useState)([]),[p,f]=(0,r.useState)({key:null,direction:"ascending"}),[b,N]=(0,r.useState)(!1),[k,C]=(0,r.useState)(!0),[S,E]=(0,r.useState)(1),[M,O]=(0,r.useState)(10),[D,I]=(0,r.useState)(null),z=(0,r.useRef)(null),[J,P]=(0,r.useState)([]),[T,A]=(0,r.useState)({}),[F,U]=(0,r.useState)(!1),[V,q]=(0,r.useState)(!1),[Z,W]=(0,r.useState)(!1),[G,B]=(0,r.useState)("active"),[H,K]=(0,r.useState)(!0),[X,Y]=(0,r.useState)({isOpen:!1,title:"",message:"",onConfirm:null}),Q=async()=>{Y({isOpen:!0,title:"Restart Controller",message:"Are you sure you want to restart the controller? This will temporarily interrupt job management.",onConfirm:async()=>{try{W(!0),N(!0),await (0,x.Ce)("restartcontroller",null,null,!0),await $()}catch(e){console.error("Error restarting controller:",e)}finally{W(!1),N(!1)}}})},$=r.useCallback(async()=>{N(!0),t(!0);try{let[e,s]=await Promise.all([(0,x.Vp)(),(0,m.zd)()]),{jobs:t,controllerStopped:n}=e,r=s.find(e=>(0,w.Ym)(e.cluster)),a=r?r.status:"NOT_FOUND",l=!1;"STOPPED"==a&&n&&(l=!0),"LAUNCHING"==a?q(!0):q(!1),j(t),U(l)}catch(e){console.error("Error fetching data:",e),j([])}finally{N(!1),t(!1),C(!1)}},[t]);r.useEffect(()=>{a&&(a.current=$)},[a,$]),(0,r.useEffect)(()=>{j([]);let e=!0;$();let t=setInterval(()=>{e&&$()},s);return()=>{e=!1,clearInterval(t)}},[s,$]),(0,r.useEffect)(()=>{E(1)},[G,l.length]),(0,r.useEffect)(()=>{P([]),K(!0)},[G]);let ee=e=>{let s="ascending";p.key===e&&"ascending"===p.direction&&(s="descending"),f({key:e,direction:s})},es=e=>p.key===e?"ascending"===p.direction?" ↑":" ↓":"",et=r.useMemo(()=>({active:["PENDING","RUNNING","RECOVERING","SUBMITTED","STARTING","CANCELLING"],finished:["SUCCEEDED","FAILED","CANCELLED","FAILED_SETUP","FAILED_PRECHECKS","FAILED_NO_RESOURCE","FAILED_CONTROLLER"]}),[]);r.useMemo(()=>({active:l.filter(e=>et.active.includes(e.status)).length,finished:l.filter(e=>et.finished.includes(e.status)).length}),[l,et]);let en=e=>J.length>0?J.includes(e):et[G].includes(e),er=r.useMemo(()=>J.length>0?l.filter(e=>J.includes(e.status)):H?l.filter(e=>et[G].includes(e.status)):[],[l,G,J,H,et]),ea=r.useMemo(()=>p.key?[...er].sort((e,s)=>e[p.key]<s[p.key]?"ascending"===p.direction?-1:1:e[p.key]>s[p.key]?"ascending"===p.direction?1:-1:0):er,[er,p]),el=Math.ceil(ea.length/M),ei=(S-1)*M,ec=ei+M,eo=ea.slice(ei,ec),ed=e=>{if(J.includes(e)){let s=J.filter(s=>s!==e);0===s.length?(K(!0),P([])):(P(s),K(!1))}else P([...J,e]),K(!1)};return(0,r.useEffect)(()=>{A(l.reduce((e,s)=>(e[s.status]=(e[s.status]||0)+1,e),{}))},[l]),(0,n.jsxs)("div",{className:"relative",children:[(0,n.jsx)("div",{className:"flex flex-col space-y-1 mb-1",children:(0,n.jsxs)("div",{className:"flex flex-wrap items-center text-sm mb-1",children:[(0,n.jsx)("span",{className:"mr-2 text-sm font-medium",children:"Statuses:"}),(0,n.jsxs)("div",{className:"flex flex-wrap gap-2 items-center",children:[!b&&0===l.length&&!k&&(0,n.jsx)("span",{className:"text-gray-500 mr-2",children:"No jobs found"}),Object.entries(T).map(e=>{let[s,t]=e;return(0,n.jsxs)("button",{onClick:()=>ed(s),className:"px-3 py-1 rounded-full flex items-center space-x-2 ".concat(en(s)||J.includes(s)?(0,v.Cl)(s):"bg-gray-50 text-gray-600 hover:bg-gray-100"),children:[(0,n.jsx)("span",{children:s}),(0,n.jsx)("span",{className:"text-xs ".concat(en(s)||J.includes(s)?"bg-white/50":"bg-gray-200"," px-1.5 py-0.5 rounded"),children:t})]},s)}),l.length>0&&(0,n.jsxs)("div",{className:"flex items-center ml-2 gap-2",children:[(0,n.jsx)("span",{className:"text-gray-500",children:"("}),(0,n.jsx)("button",{onClick:()=>{B("active"),P([]),K(!0)},className:"text-sm font-medium ".concat("active"===G&&H?"text-green-700 underline":"text-gray-600 hover:text-green-700 hover:underline"),children:"show all active jobs"}),(0,n.jsx)("span",{className:"text-gray-500 mx-1",children:"|"}),(0,n.jsx)("button",{onClick:()=>{B("finished"),P([]),K(!0)},className:"text-sm font-medium ".concat("finished"===G&&H?"text-blue-700 underline":"text-gray-600 hover:text-blue-700 hover:underline"),children:"show all finished jobs"}),(0,n.jsx)("span",{className:"text-gray-500",children:")"})]})]})]})}),(0,n.jsx)(d.Zb,{children:(0,n.jsxs)(h.iA,{children:[(0,n.jsx)(h.xD,{children:(0,n.jsxs)(h.SC,{children:[(0,n.jsxs)(h.ss,{className:"sortable whitespace-nowrap",onClick:()=>ee("id"),children:["ID",es("id")]}),(0,n.jsxs)(h.ss,{className:"sortable whitespace-nowrap",onClick:()=>ee("name"),children:["Name",es("name")]}),(0,n.jsxs)(h.ss,{className:"sortable whitespace-nowrap",onClick:()=>ee("user"),children:["User",es("user")]}),(0,n.jsxs)(h.ss,{className:"sortable whitespace-nowrap",onClick:()=>ee("submitted_at"),children:["Submitted",es("submitted_at")]}),(0,n.jsxs)(h.ss,{className:"sortable whitespace-nowrap",onClick:()=>ee("job_duration"),children:["Duration",es("job_duration")]}),(0,n.jsxs)(h.ss,{className:"sortable whitespace-nowrap",onClick:()=>ee("status"),children:["Status",es("status")]}),(0,n.jsxs)(h.ss,{className:"sortable whitespace-nowrap",onClick:()=>ee("resources"),children:["Resources",es("resources")]}),(0,n.jsxs)(h.ss,{className:"sortable whitespace-nowrap",onClick:()=>ee("cluster"),children:["Cluster",es("cluster")]}),(0,n.jsxs)(h.ss,{className:"sortable whitespace-nowrap",onClick:()=>ee("region"),children:["Region",es("region")]}),(0,n.jsxs)(h.ss,{className:"sortable whitespace-nowrap",onClick:()=>ee("recoveries"),children:["Recoveries",es("recoveries")]}),(0,n.jsx)(h.ss,{children:"Details"}),(0,n.jsx)(h.ss,{children:"Logs"})]})}),(0,n.jsx)(h.RM,{children:b&&k?(0,n.jsx)(h.SC,{children:(0,n.jsx)(h.pj,{colSpan:12,className:"text-center py-6 text-gray-500",children:(0,n.jsxs)("div",{className:"flex justify-center items-center",children:[(0,n.jsx)(c.Z,{size:20,className:"mr-2"}),(0,n.jsx)("span",{children:"Loading..."})]})})}):eo.length>0?(0,n.jsx)(n.Fragment,{children:eo.map(e=>(0,n.jsxs)(r.Fragment,{children:[(0,n.jsxs)(h.SC,{children:[(0,n.jsx)(h.pj,{children:(0,n.jsx)(i(),{href:"/jobs/".concat(e.id),className:"text-blue-600",children:e.id})}),(0,n.jsx)(h.pj,{children:(0,n.jsx)(i(),{href:"/jobs/".concat(e.id),className:"text-blue-600",children:e.name})}),(0,n.jsx)(h.pj,{children:e.user}),(0,n.jsx)(h.pj,{children:(0,u.GV)(e.submitted_at)}),(0,n.jsx)(h.pj,{children:(0,u.LU)(e.job_duration)}),(0,n.jsx)(h.pj,{children:(0,n.jsx)(v.OE,{status:e.status})}),(0,n.jsx)(h.pj,{children:e.resources}),(0,n.jsx)(h.pj,{children:e.cluster}),(0,n.jsx)(h.pj,{children:e.region}),(0,n.jsx)(h.pj,{children:e.recoveries}),(0,n.jsx)(h.pj,{children:e.details?(0,n.jsx)(R,{text:e.details,rowId:e.id,expandedRowId:D,setExpandedRowId:I}):"-"}),(0,n.jsx)(h.pj,{children:(0,n.jsx)(_,{jobParent:"/jobs",jobId:e.id,managed:!0})})]}),D===e.id&&(0,n.jsx)(L,{text:e.details,colSpan:12,innerRef:z})]},e.id))}):(0,n.jsx)(h.SC,{children:(0,n.jsx)(h.pj,{colSpan:12,className:"text-center py-6",children:(0,n.jsxs)("div",{className:"flex flex-col items-center space-y-4",children:[V&&(0,n.jsxs)("div",{className:"flex flex-col items-center space-y-2",children:[(0,n.jsx)("p",{className:"text-gray-700",children:"The managed job controller is launching. Please wait for it to be ready."}),(0,n.jsxs)("div",{className:"flex items-center",children:[(0,n.jsx)(c.Z,{size:12,className:"mr-2"}),(0,n.jsx)("span",{className:"text-gray-500",children:"Launching..."})]})]}),!F&&!V&&(0,n.jsx)("p",{className:"text-gray-500",children:"No active jobs"}),F&&(0,n.jsxs)("div",{className:"flex flex-col items-center space-y-2",children:[(0,n.jsx)("p",{className:"text-gray-700",children:"The managed job controller has been stopped. Please restart it to check the latest job status."}),(0,n.jsx)(o.z,{variant:"outline",size:"sm",onClick:Q,className:"text-sky-blue hover:text-sky-blue-bright",disabled:b||Z,children:Z?(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(c.Z,{size:12,className:"mr-2"}),"Restarting..."]}):(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(g,{className:"h-4 w-4 mr-2"}),"Restart Controller"]})})]})]})})})})]})}),ea.length>0&&(0,n.jsx)("div",{className:"flex justify-end items-center py-2 px-4 text-sm text-gray-700",children:(0,n.jsxs)("div",{className:"flex items-center space-x-4",children:[(0,n.jsxs)("div",{className:"flex items-center",children:[(0,n.jsx)("span",{className:"mr-2",children:"Rows per page:"}),(0,n.jsxs)("div",{className:"relative inline-block",children:[(0,n.jsxs)("select",{value:M,onChange:e=>{O(parseInt(e.target.value,10)),E(1)},className:"py-1 pl-2 pr-6 appearance-none outline-none cursor-pointer border-none bg-transparent",style:{minWidth:"40px"},children:[(0,n.jsx)("option",{value:10,children:"10"}),(0,n.jsx)("option",{value:30,children:"30"}),(0,n.jsx)("option",{value:50,children:"50"}),(0,n.jsx)("option",{value:100,children:"100"}),(0,n.jsx)("option",{value:200,children:"200"})]}),(0,n.jsx)("svg",{xmlns:"http://www.w3.org/2000/svg",className:"h-4 w-4 text-gray-500 absolute right-0 top-1/2 transform -translate-y-1/2 pointer-events-none",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:(0,n.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M19 9l-7 7-7-7"})})]})]}),(0,n.jsxs)("div",{children:[ei+1," – ",Math.min(ec,ea.length)," of"," ",ea.length]}),(0,n.jsxs)("div",{className:"flex items-center space-x-2",children:[(0,n.jsx)(o.z,{variant:"ghost",size:"icon",onClick:()=>{E(e=>Math.max(e-1,1))},disabled:1===S,className:"text-gray-500 h-8 w-8 p-0",children:(0,n.jsx)("svg",{xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",className:"chevron-left",children:(0,n.jsx)("path",{d:"M15 18l-6-6 6-6"})})}),(0,n.jsx)(o.z,{variant:"ghost",size:"icon",onClick:()=>{E(e=>Math.min(e+1,el))},disabled:S===el||0===el,className:"text-gray-500 h-8 w-8 p-0",children:(0,n.jsx)("svg",{xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",className:"chevron-right",children:(0,n.jsx)("path",{d:"M9 18l6-6-6-6"})})})]})]})}),(0,n.jsx)(y.cV,{isOpen:X.isOpen,onClose:()=>Y({...X,isOpen:!1}),onConfirm:X.onConfirm,title:X.title,message:X.message})]})}function _(e){let{withLabel:s=!1,jobParent:t,jobId:r,managed:l}=e,i=(0,a.useRouter)(),c=(e,s)=>{e.preventDefault(),e.stopPropagation(),i.push({pathname:"".concat(t,"/").concat(r),query:{tab:s}})};return(0,n.jsxs)("div",{className:"flex items-center space-x-4",children:[(0,n.jsx)(u.WH,{content:"View Job Logs",className:"capitalize text-sm text-muted-foreground",children:(0,n.jsxs)("button",{onClick:e=>c(e,"logs"),className:"text-sky-blue hover:text-sky-blue-bright font-medium inline-flex items-center h-8",children:[(0,n.jsx)(b,{className:"w-4 h-4"}),s&&(0,n.jsx)("span",{className:"ml-1.5",children:"Logs"})]})},"logs"),l&&(0,n.jsx)(u.WH,{content:"View Controller Logs",className:"capitalize text-sm text-muted-foreground",children:(0,n.jsxs)("button",{onClick:e=>c(e,"controllerlogs"),className:"text-sky-blue hover:text-sky-blue-bright font-medium inline-flex items-center h-8",children:[(0,n.jsx)(N,{className:"w-4 h-4"}),s&&(0,n.jsx)("span",{className:"ml-2",children:"Controller Logs"})]})},"controllerlogs")]})}function E(e){let{clusterName:s,clusterJobData:t,loading:a}=e,[l,x]=(0,r.useState)(null),[m,j]=(0,r.useState)({key:null,direction:"ascending"}),[p,f]=(0,r.useState)(1),[g,b]=(0,r.useState)(10),N=(0,r.useRef)(null),[y,w]=(0,r.useState)(null);(0,r.useEffect)(()=>{let e=e=>{l&&N.current&&!N.current.contains(e.target)&&x(null)};return document.addEventListener("mousedown",e),()=>{document.removeEventListener("mousedown",e)}},[l]);let k=r.useMemo(()=>t||[],[t]);(0,r.useEffect)(()=>{JSON.stringify(t)!==JSON.stringify(y)&&w(t)},[t,y]);let C=r.useMemo(()=>m.key?[...k].sort((e,s)=>e[m.key]<s[m.key]?"ascending"===m.direction?-1:1:e[m.key]>s[m.key]?"ascending"===m.direction?1:-1:0):k,[k,m]),S=e=>{let s="ascending";m.key===e&&"ascending"===m.direction&&(s="descending"),j({key:e,direction:s})},E=e=>m.key===e?"ascending"===m.direction?" ↑":" ↓":"",M=Math.ceil(C.length/g),O=(p-1)*g,D=O+g,I=C.slice(O,D);return(0,n.jsxs)("div",{className:"relative",children:[(0,n.jsxs)(d.Zb,{children:[(0,n.jsxs)("div",{className:"flex items-center justify-between p-4",children:[(0,n.jsx)("h3",{className:"text-lg font-semibold",children:"Cluster Jobs"}),a&&(0,n.jsxs)("div",{className:"flex items-center mr-2",children:[(0,n.jsx)(c.Z,{size:15,className:"mt-0"}),(0,n.jsx)("span",{className:"ml-2 text-gray-500 text-sm",children:"Loading..."})]})]}),(0,n.jsxs)(h.iA,{children:[(0,n.jsx)(h.xD,{children:(0,n.jsxs)(h.SC,{children:[(0,n.jsxs)(h.ss,{className:"sortable whitespace-nowrap",onClick:()=>S("id"),children:["ID",E("id")]}),(0,n.jsxs)(h.ss,{className:"sortable whitespace-nowrap",onClick:()=>S("job"),children:["Name",E("job")]}),(0,n.jsxs)(h.ss,{className:"sortable whitespace-nowrap",onClick:()=>S("user"),children:["User",E("user")]}),(0,n.jsxs)(h.ss,{className:"sortable whitespace-nowrap",onClick:()=>S("submitted_at"),children:["Submitted",E("submitted_at")]}),(0,n.jsxs)(h.ss,{className:"sortable whitespace-nowrap",onClick:()=>S("job_duration"),children:["Duration",E("job_duration")]}),(0,n.jsxs)(h.ss,{className:"sortable whitespace-nowrap",onClick:()=>S("status"),children:["Status",E("status")]}),(0,n.jsxs)(h.ss,{className:"sortable whitespace-nowrap",onClick:()=>S("resources"),children:["Resources",E("resources")]}),(0,n.jsx)(h.ss,{className:"whitespace-nowrap",children:"Logs"})]})}),(0,n.jsx)(h.RM,{children:I.length>0?I.map(e=>(0,n.jsxs)(r.Fragment,{children:[(0,n.jsxs)(h.SC,{className:l===e.id?"selected-row":"",children:[(0,n.jsx)(h.pj,{children:(0,n.jsx)(i(),{href:"/clusters/".concat(s,"/").concat(e.id),className:"text-blue-600",children:e.id})}),(0,n.jsx)(h.pj,{children:(0,n.jsx)(i(),{href:"/clusters/".concat(s,"/").concat(e.id),className:"text-blue-600",children:(0,n.jsx)(R,{text:e.job||"Unnamed job",rowId:e.id,expandedRowId:l,setExpandedRowId:x})})}),(0,n.jsx)(h.pj,{children:e.user}),(0,n.jsx)(h.pj,{children:(0,u.GV)(e.submitted_at)}),(0,n.jsx)(h.pj,{children:(0,u.LU)(e.job_duration)}),(0,n.jsx)(h.pj,{children:(0,n.jsx)(v.OE,{status:e.status})}),(0,n.jsx)(h.pj,{children:e.resources}),(0,n.jsx)(h.pj,{className:"flex content-center items-center",children:(0,n.jsx)(_,{jobParent:"/clusters/".concat(s),jobId:e.id,managed:!1})})]}),l===e.id&&(0,n.jsx)(L,{text:e.job||"Unnamed job",colSpan:8,innerRef:N})]},e.id)):(0,n.jsx)(h.SC,{children:(0,n.jsx)(h.pj,{colSpan:8,className:"text-center py-6 text-gray-500",children:"No jobs found"})})})]})]}),C.length>0&&(0,n.jsx)("div",{className:"flex justify-end items-center py-2 px-4 text-sm text-gray-700",children:(0,n.jsxs)("div",{className:"flex items-center space-x-4",children:[(0,n.jsxs)("div",{className:"flex items-center",children:[(0,n.jsx)("span",{className:"mr-2",children:"Rows per page:"}),(0,n.jsxs)("div",{className:"relative inline-block",children:[(0,n.jsxs)("select",{value:g,onChange:e=>{b(parseInt(e.target.value,10)),f(1)},className:"py-1 pl-2 pr-6 appearance-none outline-none cursor-pointer border-none bg-transparent",style:{minWidth:"40px"},children:[(0,n.jsx)("option",{value:5,children:"5"}),(0,n.jsx)("option",{value:10,children:"10"}),(0,n.jsx)("option",{value:20,children:"20"}),(0,n.jsx)("option",{value:50,children:"50"})]}),(0,n.jsx)("svg",{xmlns:"http://www.w3.org/2000/svg",className:"h-4 w-4 text-gray-500 absolute right-0 top-1/2 transform -translate-y-1/2 pointer-events-none",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:(0,n.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M19 9l-7 7-7-7"})})]})]}),(0,n.jsxs)("div",{children:[O+1," – ",Math.min(D,C.length)," of"," ",C.length]}),(0,n.jsxs)("div",{className:"flex items-center space-x-2",children:[(0,n.jsx)(o.z,{variant:"ghost",size:"icon",onClick:()=>{f(e=>Math.max(e-1,1))},disabled:1===p,className:"text-gray-500 h-8 w-8 p-0",children:(0,n.jsx)("svg",{xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",className:"chevron-left",children:(0,n.jsx)("path",{d:"M15 18l-6-6 6-6"})})}),(0,n.jsx)(o.z,{variant:"ghost",size:"icon",onClick:()=>{f(e=>Math.min(e+1,M))},disabled:p===M||0===M,className:"text-gray-500 h-8 w-8 p-0",children:(0,n.jsx)("svg",{xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",className:"chevron-right",children:(0,n.jsx)("path",{d:"M9 18l6-6-6-6"})})})]})]})})]})}function L(e){let{text:s,colSpan:t,innerRef:r}=e;return(0,n.jsx)(h.SC,{className:"expanded-details",children:(0,n.jsx)(h.pj,{colSpan:t,children:(0,n.jsx)("div",{className:"p-4 bg-gray-50 rounded-md border border-gray-200",ref:r,children:(0,n.jsx)("div",{className:"flex justify-between items-start",children:(0,n.jsxs)("div",{className:"flex-1",children:[(0,n.jsx)("p",{className:"text-sm font-medium text-gray-900",children:"Full Details"}),(0,n.jsx)("p",{className:"mt-1 text-sm text-gray-700",style:{whiteSpace:"pre-wrap"},children:s})]})})})})})}function R(e){let{text:s,rowId:t,expandedRowId:a,setExpandedRowId:l}=e,i=s.length>50,c=a===t,o=i?"".concat(s.substring(0,50)):s,d=(0,r.useRef)(null);return(0,n.jsxs)("div",{className:"truncated-details relative max-w-full flex items-center",children:[(0,n.jsx)("span",{className:"truncate",children:o}),i&&(0,n.jsx)("button",{ref:d,type:"button",onClick:e=>{e.preventDefault(),e.stopPropagation(),l(c?null:t)},className:"text-blue-600 hover:text-blue-800 font-medium ml-1 flex-shrink-0","data-button-type":"show-more-less",children:c?"... show less":"... show more"})]})}},8969:function(e,s,t){t.d(s,{Ce:function(){return o},NJ:function(){return c},Pr:function(){return i},Vp:function(){return l}});var n=t(7294),r=t(5821),a=t(3225);async function l(){let{allUsers:e=!0}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};try{let s=(await fetch("".concat(a.f4,"/jobs/queue"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({all_users:e})})).headers.get("x-request-id"),t=await fetch("".concat(a.f4,"/api/get?request_id=").concat(s));if(500===t.status){try{let e=await t.json();if(e.detail&&e.detail.error)try{let s=JSON.parse(e.detail.error);if(s.type&&s.type===a.IV)return{jobs:[],controllerStopped:!0}}catch(e){console.error("Error parsing JSON:",e)}}catch(e){console.error("Error parsing JSON:",e)}return{jobs:[],controllerStopped:!1}}let n=await t.json();return{jobs:(n.return_value?JSON.parse(n.return_value):[]).map(e=>{let s=[];e.submitted_at&&s.push({time:new Date(1e3*e.submitted_at),event:"Job submitted."}),e.start_at&&s.push({time:new Date(1e3*e.start_at),event:"Job started."}),e.end_at&&("CANCELLING"==e.status||"CANCELLED"==e.status?s.push({time:new Date(1e3*e.end_at),event:"Job cancelled."}):s.push({time:new Date(1e3*e.end_at),event:"Job completed."})),e.last_recovered_at&&e.last_recovered_at!=e.start_at&&s.push({time:new Date(1e3*e.last_recovered_at),event:"Job recovered."});let t=(e.end_at?e.end_at:Date.now()/1e3)-e.submitted_at;return{id:e.job_id,task:e.task_name,name:e.job_name,job_duration:e.job_duration,total_duration:t,status:e.status,resources:e.resources,cluster:e.cluster_resources,region:e.region,recoveries:e.recovery_count,details:e.failure_reason,user:e.user_name,submitted_at:e.submitted_at?new Date(1e3*e.submitted_at):null,events:s}}),controllerStopped:!1}}catch(e){return console.error("Error fetching managed job data:",e),{jobs:[],controllerStopped:!1}}}function i(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,[s,t]=(0,n.useState)(null),[r,a]=(0,n.useState)(!0);return(0,n.useEffect)(()=>{(async function(){try{a(!0);let e=await l({allUsers:!0});t(e)}catch(e){console.error("Error fetching managed job data:",e)}finally{a(!1)}})()},[e]),{jobData:s,loading:r}}async function c(e){let{jobId:s,controller:t=!1,signal:n,onNewLog:l}=e,i=new Promise(e=>{setTimeout(()=>{e({timeout:!0})},1e4)}),c=(async()=>{try{let e=(await fetch("".concat(a.f4,"/jobs/logs"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({controller:t,follow:!1,job_id:s}),...n?{signal:n}:{}})).body.getReader();try{for(;;){let{done:s,value:t}=await e.read();if(s)break;let n=new TextDecoder().decode(t);l(n)}}finally{e.cancel()}return{timeout:!1}}catch(e){if("AbortError"===e.name)return{timeout:!1};throw e}})();if((await Promise.race([c,i])).timeout){(0,r.C)("Log request for job ".concat(s," timed out after ").concat(1e4,"ms"),"error");return}}async function o(e,s,t){let n="",l="",i="",c={};if("restartcontroller"===e)n="Restarting",l="restarted",i="jobs/queue",c={all_users:!0,refresh:!0},s="controller";else throw Error("Invalid action: ".concat(e));(0,r.C)("".concat(n," job ").concat(s,"..."),"info");try{try{let e=(await fetch("".concat(a.f4,"/").concat(i),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(c)})).headers.get("x-request-id"),o=await fetch("".concat(a.f4,"/api/get?request_id=").concat(e));if(200===o.status)(0,r.C)("Job ".concat(s," ").concat(l," successfully."),"success");else if(500===o.status)try{let e=await o.json();if(e.detail&&e.detail.error)try{let l=JSON.parse(e.detail.error);l.type&&l.type===a.B8?(0,r.C)("".concat(n," job ").concat(s," is not supported!"),"error",1e4):l.type&&l.type===a.h1?(0,r.C)("Cluster ".concat(t," does not exist."),"error"):l.type&&l.type===a.IV?(0,r.C)("Cluster ".concat(t," is not up."),"error"):(0,r.C)("".concat(n," job ").concat(s," failed: ").concat(l.type),"error")}catch(t){(0,r.C)("".concat(n," job ").concat(s," failed: ").concat(e.detail.error),"error")}else(0,r.C)("".concat(n," job ").concat(s," failed with no details."),"error")}catch(e){(0,r.C)("".concat(n," job ").concat(s," failed with parse error."),"error")}else(0,r.C)("".concat(n," job ").concat(s," failed with status ").concat(o.status,"."),"error")}catch(e){console.error("Fetch error:",e),(0,r.C)("Network error ".concat(n," job ").concat(s,": ").concat(e.message),"error")}}catch(e){console.error("Error in handleStop:",e),(0,r.C)("Critical error ".concat(n," job ").concat(s,": ").concat(e.message),"error")}}}}]);
@@ -0,0 +1,6 @@
1
+ "use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[37],{9037:function(e,s,t){t.d(s,{Cc:function(){return v},GV:function(){return z}});var n=t(5893),l=t(7294),r=t(8799),a=t(7469),c=t(1664),i=t.n(c),o=t(803),d=t(7673),h=t(8764),x=t(3266),u=t(4545),j=t(3626),m=t(998);/**
2
+ * @license lucide-react v0.407.0 - ISC
3
+ *
4
+ * This source code is licensed under the ISC license.
5
+ * See the LICENSE file in the root directory of this source tree.
6
+ */let p=(0,m.Z)("Terminal",[["polyline",{points:"4 17 10 11 4 5",key:"akl6gq"}],["line",{x1:"12",x2:"20",y1:"19",y2:"19",key:"q2wloq"}]]),g=(0,m.Z)("SquareCode",[["path",{d:"M10 9.5 8 12l2 2.5",key:"3mjy60"}],["path",{d:"m14 9.5 2 2.5-2 2.5",key:"1bir2l"}],["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}]]);var k=t(9470),f=t(1266),w=t(9307),N=t(3001);function v(){let[e,s]=(0,l.useState)(!1),t=l.useRef(null),[a,c]=(0,l.useState)(!1),[d,h]=(0,l.useState)(!1),[x,u]=(0,l.useState)(null),m=(0,N.X)();return(0,n.jsxs)(k.A,{highlighted:"clusters",children:[(0,n.jsxs)("div",{className:"flex items-center justify-between mb-4 h-5",children:[(0,n.jsx)("div",{className:"text-base",children:(0,n.jsx)(i(),{href:"/clusters",className:"text-sky-blue hover:underline leading-none",children:"Sky Clusters"})}),(0,n.jsxs)("div",{className:"flex items-center",children:[e&&(0,n.jsxs)("div",{className:"flex items-center mr-2",children:[(0,n.jsx)(r.Z,{size:15,className:"mt-0"}),(0,n.jsx)("span",{className:"ml-2 text-gray-500",children:"Loading..."})]}),(0,n.jsxs)(o.z,{variant:"ghost",onClick:()=>{t.current&&t.current()},disabled:e,className:"text-sky-blue hover:text-sky-blue-bright flex items-center",children:[(0,n.jsx)(j.Z,{className:"h-4 w-4 mr-1.5"}),!m&&(0,n.jsx)("span",{children:"Refresh"})]})]})]}),(0,n.jsx)(y,{refreshInterval:1e4,setLoading:s,refreshDataRef:t,onOpenSSHModal:e=>{u(e),c(!0)},onOpenVSCodeModal:e=>{u(e),h(!0)}}),(0,n.jsx)(f.Oh,{isOpen:a,onClose:()=>c(!1),cluster:x}),(0,n.jsx)(f._R,{isOpen:d,onClose:()=>h(!1),cluster:x})]})}function y(e){let{refreshInterval:s,setLoading:t,refreshDataRef:c,onOpenSSHModal:j,onOpenVSCodeModal:m}=e,[p,g]=(0,l.useState)([]),[k,f]=(0,l.useState)({key:null,direction:"ascending"}),[N,v]=(0,l.useState)(!1),[y,C]=(0,l.useState)(!0),[b,S]=(0,l.useState)(1),[M,O]=(0,l.useState)(10),R=l.useCallback(async()=>{t(!0),v(!0),g(await (0,x.zd)()),t(!1),v(!1),C(!1)},[t]),V=l.useMemo(()=>(0,u.R0)(p,k.key,k.direction),[p,k]);l.useEffect(()=>{c&&(c.current=R)},[c,R]),(0,l.useEffect)(()=>{g([]);let e=!0;R();let t=setInterval(()=>{e&&R()},s);return()=>{e=!1,clearInterval(t)}},[s,R]),(0,l.useEffect)(()=>{S(1)},[p.length]);let L=e=>{let s="ascending";k.key===e&&"ascending"===k.direction&&(s="descending"),f({key:e,direction:s})},_=e=>k.key===e?"ascending"===k.direction?" ↑":" ↓":"",E=Math.ceil(V.length/M),W=(b-1)*M,Z=W+M,H=V.slice(W,Z);return(0,n.jsxs)("div",{children:[(0,n.jsx)(d.Zb,{children:(0,n.jsxs)(h.iA,{children:[(0,n.jsx)(h.xD,{children:(0,n.jsxs)(h.SC,{children:[(0,n.jsxs)(h.ss,{className:"sortable whitespace-nowrap",onClick:()=>L("status"),children:["Status",_("status")]}),(0,n.jsxs)(h.ss,{className:"sortable whitespace-nowrap",onClick:()=>L("cluster"),children:["Cluster",_("cluster")]}),(0,n.jsxs)(h.ss,{className:"sortable whitespace-nowrap",onClick:()=>L("user"),children:["User",_("user")]}),(0,n.jsxs)(h.ss,{className:"sortable whitespace-nowrap",onClick:()=>L("resources_str"),children:["Resources",_("resources_str")]}),(0,n.jsxs)(h.ss,{className:"sortable whitespace-nowrap",onClick:()=>L("region"),children:["Region",_("region")]}),(0,n.jsxs)(h.ss,{className:"sortable whitespace-nowrap",onClick:()=>L("time"),children:["Started",_("time")]}),(0,n.jsx)(h.ss,{children:"Actions"})]})}),(0,n.jsx)(h.RM,{children:N&&y?(0,n.jsx)(h.SC,{children:(0,n.jsx)(h.pj,{colSpan:8,className:"text-center py-6 text-gray-500",children:(0,n.jsxs)("div",{className:"flex justify-center items-center",children:[(0,n.jsx)(r.Z,{size:20,className:"mr-2"}),(0,n.jsx)("span",{children:"Loading..."})]})})}):H.length>0?H.map((e,s)=>(0,n.jsxs)(h.SC,{children:[(0,n.jsx)(h.pj,{children:(0,n.jsx)(w.OE,{status:e.status})}),(0,n.jsx)(h.pj,{children:(0,n.jsx)(i(),{href:"/clusters/".concat(e.cluster),className:"text-blue-600",children:e.cluster})}),(0,n.jsx)(h.pj,{children:e.user}),(0,n.jsx)(h.pj,{children:e.resources_str}),(0,n.jsx)(h.pj,{children:e.region}),(0,n.jsx)(h.pj,{children:(0,a.GV)(e.time)}),(0,n.jsx)(h.pj,{className:"text-left",children:(0,n.jsx)(z,{cluster:e.cluster,status:e.status,onOpenSSHModal:j,onOpenVSCodeModal:m})})]},s)):(0,n.jsx)(h.SC,{children:(0,n.jsx)(h.pj,{colSpan:8,className:"text-center py-6 text-gray-500",children:"No active clusters"})})})]})}),p.length>0&&(0,n.jsx)("div",{className:"flex justify-end items-center py-2 px-4 text-sm text-gray-700",children:(0,n.jsxs)("div",{className:"flex items-center space-x-4",children:[(0,n.jsxs)("div",{className:"flex items-center",children:[(0,n.jsx)("span",{className:"mr-2",children:"Rows per page:"}),(0,n.jsxs)("div",{className:"relative inline-block",children:[(0,n.jsxs)("select",{value:M,onChange:e=>{O(parseInt(e.target.value,10)),S(1)},className:"py-1 pl-2 pr-6 appearance-none outline-none cursor-pointer border-none bg-transparent",style:{minWidth:"40px"},children:[(0,n.jsx)("option",{value:10,children:"10"}),(0,n.jsx)("option",{value:30,children:"30"}),(0,n.jsx)("option",{value:50,children:"50"}),(0,n.jsx)("option",{value:100,children:"100"}),(0,n.jsx)("option",{value:200,children:"200"})]}),(0,n.jsx)("svg",{xmlns:"http://www.w3.org/2000/svg",className:"h-4 w-4 text-gray-500 absolute right-0 top-1/2 transform -translate-y-1/2 pointer-events-none",fill:"none",viewBox:"0 0 24 24",stroke:"currentColor",children:(0,n.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M19 9l-7 7-7-7"})})]})]}),(0,n.jsxs)("div",{children:[W+1," – ",Math.min(Z,p.length)," of"," ",p.length]}),(0,n.jsxs)("div",{className:"flex items-center space-x-2",children:[(0,n.jsx)(o.z,{variant:"ghost",size:"icon",onClick:()=>{S(e=>Math.max(e-1,1))},disabled:1===b,className:"text-gray-500 h-8 w-8 p-0",children:(0,n.jsx)("svg",{xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",className:"chevron-left",children:(0,n.jsx)("path",{d:"M15 18l-6-6 6-6"})})}),(0,n.jsx)(o.z,{variant:"ghost",size:"icon",onClick:()=>{S(e=>Math.min(e+1,E))},disabled:b===E||0===E,className:"text-gray-500 h-8 w-8 p-0",children:(0,n.jsx)("svg",{xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",className:"chevron-right",children:(0,n.jsx)("path",{d:"M9 18l6-6-6-6"})})})]})]})})]})}let C=(e,s)=>{s&&s(e)},b=(e,s)=>{s?s(e):window.open("ssh://".concat(e))},S=e=>"RUNNING"===e?["connect","VSCode"]:[],M={connect:(0,n.jsx)(p,{className:"w-4 h-4 text-gray-500 inline-block"}),VSCode:(0,n.jsx)(g,{className:"w-4 h-4 text-gray-500 inline-block"})};function z(e){let{withLabel:s=!1,cluster:t,status:l,onOpenSSHModal:r,onOpenVSCodeModal:c}=e,i=S(l),o=(0,N.X)(),d=e=>{switch(e){case"connect":b(t,r);break;case"VSCode":C(t,c);break;default:return}};return(0,n.jsx)(n.Fragment,{children:(0,n.jsx)("div",{className:"flex items-center space-x-4",children:Object.entries(M).map(e=>{let t,l,[r,c]=e;switch(r){case"connect":t="Connect",l="Connect with SSH";break;case"VSCode":t="VSCode",l="Open in VS Code"}return(s||(t=""),i.includes(r))?(0,n.jsx)(a.WH,{content:l,className:"capitalize text-sm text-muted-foreground",children:(0,n.jsxs)("button",{onClick:()=>d(r),className:"text-sky-blue hover:text-sky-blue-bright font-medium inline-flex items-center",children:[c,!o&&(0,n.jsx)("span",{className:"ml-1.5",children:t})]})},r):(0,n.jsx)(a.WH,{content:l,className:"capitalize text-sm text-muted-foreground",children:(0,n.jsxs)("span",{className:"opacity-30 flex items-center cursor-not-allowed text-sm",title:r,children:[c,!o&&(0,n.jsx)("span",{className:"ml-1.5",children:t})]})},r)})})})}}}]);
@@ -0,0 +1 @@
1
+ "use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[845],{1266:function(e,t,a){a.d(t,{cV:function(){return _},Oh:function(){return v},_R:function(){return w}});var s=a(5893),r=a(7294),n=a(5235),o=a(2350),l=a(3767);let c=n.fC;n.xz;let i=n.h_;n.x8;let d=r.forwardRef((e,t)=>{let{className:a,...r}=e;return(0,s.jsx)(n.aV,{ref:t,className:(0,o.cn)("fixed inset-0 z-50 bg-black/50 backdrop-blur-sm data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",a),...r})});d.displayName=n.aV.displayName;let u=r.forwardRef((e,t)=>{let{className:a,children:r,...c}=e;return(0,s.jsxs)(i,{children:[(0,s.jsx)(d,{}),(0,s.jsxs)(n.VY,{ref:t,className:(0,o.cn)("fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border border-gray-200 bg-white p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg",a),...c,children:[r,(0,s.jsxs)(n.x8,{className:"absolute right-4 top-4 rounded-sm opacity-70 ring-offset-white transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-gray-400 focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-gray-100 data-[state=open]:text-gray-500",children:[(0,s.jsx)(l.Z,{className:"h-4 w-4"}),(0,s.jsx)("span",{className:"sr-only",children:"Close"})]})]})]})});u.displayName=n.VY.displayName;let f=e=>{let{className:t,...a}=e;return(0,s.jsx)("div",{className:(0,o.cn)("flex flex-col space-y-1.5 text-center sm:text-left",t),...a})};f.displayName="DialogHeader";let m=e=>{let{className:t,...a}=e;return(0,s.jsx)("div",{className:(0,o.cn)("flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2",t),...a})};m.displayName="DialogFooter";let x=r.forwardRef((e,t)=>{let{className:a,...r}=e;return(0,s.jsx)(n.Dx,{ref:t,className:(0,o.cn)("text-lg font-semibold leading-none tracking-tight",a),...r})});x.displayName=n.Dx.displayName;let h=r.forwardRef((e,t)=>{let{className:a,...r}=e;return(0,s.jsx)(n.dk,{ref:t,className:(0,o.cn)("text-sm text-gray-500",a),...r})});h.displayName=n.dk.displayName;var p=a(803),b=a(7673),g=a(8671),j=a(7469),y=a(3225),N=a(3001);function v(e){let{isOpen:t,onClose:a,cluster:n}=e,[o,l]=r.useState(!1),i=e=>{navigator.clipboard.writeText(e),l(!0),setTimeout(()=>l(!1),2e3)},d=["sky status ".concat(n),"ssh ".concat(n)],m=d.join("\n");return(0,s.jsx)(c,{open:t,onOpenChange:a,children:(0,s.jsxs)(u,{className:"sm:max-w-md",children:[(0,s.jsxs)(f,{children:[(0,s.jsxs)(x,{children:["Connect to: ",(0,s.jsx)("span",{className:"font-light",children:n})]}),(0,s.jsx)(h,{children:"Use these instructions to connect to your cluster via SSH."})]}),(0,s.jsxs)("div",{className:"flex flex-col space-y-4",children:[(0,s.jsxs)("div",{children:[(0,s.jsx)("h3",{className:"text-sm font-medium mb-2",children:"SSH Command"}),(0,s.jsx)(b.Zb,{className:"p-3 bg-gray-50",children:(0,s.jsxs)("div",{className:"flex items-center justify-between",children:[(0,s.jsx)("pre",{className:"text-sm w-full whitespace-pre-wrap",children:d.map((e,t)=>(0,s.jsx)("code",{className:"block",children:e},t))}),(0,s.jsx)(j.WH,{content:o?"Copied!":"Copy command",children:(0,s.jsx)(p.z,{variant:"ghost",size:"icon",onClick:()=>i(m),className:"h-8 w-8 rounded-full",children:(0,s.jsx)(g.Z,{className:"h-4 w-4"})})})]})})]}),(0,s.jsxs)("div",{children:[(0,s.jsx)("h3",{className:"text-sm font-medium mb-2",children:"Additional Information"}),(0,s.jsxs)("p",{className:"text-sm text-secondary-foreground",children:["Make sure to run"," ",(0,s.jsxs)("code",{className:"text-sm",children:["sky status ",n]})," first to have SkyPilot set up the SSH access."]})]})]})]})})}function w(e){let{isOpen:t,onClose:a,cluster:r}=e,n=(0,N.X)();return(0,s.jsx)(c,{open:t,onOpenChange:a,children:(0,s.jsx)(u,{className:"sm:max-w-3xl",children:(0,s.jsxs)(f,{children:[(0,s.jsxs)(x,{children:["Connect to: ",(0,s.jsx)("span",{className:"font-light",children:r})]}),(0,s.jsx)(h,{children:(0,s.jsxs)("div",{className:"flex flex-col space-y-4",children:[(0,s.jsxs)("div",{children:[(0,s.jsx)("h3",{className:"text-sm font-medium mb-2 my-2",children:"Setup SSH access"}),(0,s.jsx)(b.Zb,{className:"p-3 bg-gray-50",children:(0,s.jsx)("pre",{className:"text-sm",children:(0,s.jsxs)("code",{children:["sky status ",r]})})})]}),(0,s.jsxs)("div",{children:[(0,s.jsx)("h3",{className:"text-sm font-medium",children:"Connect with VSCode/Cursor"}),(0,s.jsx)("div",{className:"relative ".concat(n?"-mt-5":"-mt-10"),style:{paddingBottom:"75%"},children:(0,s.jsxs)("video",{className:"absolute top-0 left-0 w-full h-full rounded-lg",controls:!0,autoPlay:!0,muted:!0,preload:"metadata",children:[(0,s.jsx)("source",{src:"".concat(y.GW,"/videos/cursor-small.mp4"),type:"video/mp4"}),"Your browser does not support the video tag."]})})]})]})})]})})})}function _(e){let{isOpen:t,onClose:a,onConfirm:r,title:n,message:o,confirmText:l="Confirm",confirmVariant:i="destructive"}=e;return(0,s.jsx)(c,{open:t,onOpenChange:a,children:(0,s.jsxs)(u,{className:"sm:max-w-md",children:[(0,s.jsxs)(f,{children:[(0,s.jsx)(x,{children:n}),(0,s.jsx)(h,{children:o})]}),(0,s.jsxs)(m,{className:"flex justify-end gap-2 pt-4",children:[(0,s.jsx)(p.z,{variant:"outline",onClick:a,children:"Cancel"}),(0,s.jsx)(p.z,{variant:i,onClick:()=>{r(),a()},children:l})]})]})})}},803:function(e,t,a){a.d(t,{z:function(){return i}});var s=a(5893),r=a(7294),n=a(8426),o=a(5139),l=a(2350);let c=(0,o.j)("inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50",{variants:{variant:{default:"bg-primary text-primary-foreground hover:bg-primary/90",destructive:"bg-destructive text-destructive-foreground hover:bg-destructive/90",outline:"border border-input bg-background hover:bg-accent hover:text-accent-foreground",secondary:"bg-secondary text-secondary-foreground hover:bg-secondary/80",ghost:"hover:bg-accent hover:text-accent-foreground",link:"text-primary underline-offset-4 hover:underline"},size:{default:"h-10 px-4 py-2",sm:"h-9 rounded-md px-3",lg:"h-11 rounded-md px-8",icon:"h-10 w-10"}},defaultVariants:{variant:"default",size:"default"}}),i=r.forwardRef((e,t)=>{let{className:a,variant:r,size:o,asChild:i=!1,...d}=e,u=i?n.g7:"button";return(0,s.jsx)(u,{className:(0,l.cn)(c({variant:r,size:o,className:a})),ref:t,...d})});i.displayName="Button"},8764:function(e,t,a){a.d(t,{RM:function(){return c},SC:function(){return i},iA:function(){return o},pj:function(){return u},ss:function(){return d},xD:function(){return l}});var s=a(5893),r=a(7294),n=a(2350);let o=r.forwardRef((e,t)=>{let{className:a,...r}=e;return(0,s.jsx)("div",{className:"relative w-full overflow-auto",children:(0,s.jsx)("table",{ref:t,className:(0,n.cn)("w-full caption-bottom text-base",a),...r})})});o.displayName="Table";let l=r.forwardRef((e,t)=>{let{className:a,...r}=e;return(0,s.jsx)("thead",{ref:t,className:(0,n.cn)("[&_tr]:border-b",a),...r})});l.displayName="TableHeader";let c=r.forwardRef((e,t)=>{let{className:a,...r}=e;return(0,s.jsx)("tbody",{ref:t,className:(0,n.cn)("[&_tr:last-child]:border-0",a),...r})});c.displayName="TableBody",r.forwardRef((e,t)=>{let{className:a,...r}=e;return(0,s.jsx)("tfoot",{ref:t,className:(0,n.cn)("border-t bg-muted/50 font-medium [&>tr]:last:border-b-0",a),...r})}).displayName="TableFooter";let i=r.forwardRef((e,t)=>{let{className:a,...r}=e;return(0,s.jsx)("tr",{ref:t,className:(0,n.cn)("border-b transition-colors hover:bg-muted/50 data-[state=selected]:bg-muted",a),...r})});i.displayName="TableRow";let d=r.forwardRef((e,t)=>{let{className:a,...r}=e;return(0,s.jsx)("th",{ref:t,className:(0,n.cn)("h-12 px-4 text-left align-middle font-medium text-[hsl(var(--text-strong))] [&:has([role=checkbox])]:pr-0",a),...r})});d.displayName="TableHead";let u=r.forwardRef((e,t)=>{let{className:a,...r}=e;return(0,s.jsx)("td",{ref:t,className:(0,n.cn)("p-4 align-middle [&:has([role=checkbox])]:pr-0",a),...r})});u.displayName="TableCell",r.forwardRef((e,t)=>{let{className:a,...r}=e;return(0,s.jsx)("caption",{ref:t,className:(0,n.cn)("mt-4 text-base text-muted-foreground",a),...r})}).displayName="TableCaption"},3266:function(e,t,a){a.d(t,{QL:function(){return d},Sl:function(){return c},zd:function(){return l}});var s=a(7294),r=a(5821),n=a(3225);let o={UP:"RUNNING",STOPPED:"STOPPED",INIT:"LAUNCHING",null:"TERMINATED"};async function l(){let{clusterNames:e=null}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};try{let t=(await fetch("".concat(n.f4,"/status"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({cluster_names:e,all_users:!0})})).headers.get("x-request-id"),a=await fetch("".concat(n.f4,"/api/get?request_id=").concat(t)),s=await a.json();return(s.return_value?JSON.parse(s.return_value):[]).map(e=>({status:o[e.status],cluster:e.name,user:e.user_name,infra:e.cloud,region:e.region,cpus:e.cpus,mem:e.memory,gpus:e.accelerators,resources_str:e.resources_str,time:new Date(1e3*e.launched_at),num_nodes:e.nodes,jobs:[],events:[{time:new Date(1e3*e.launched_at),event:"Cluster created."}]}))}catch(e){return console.error("Error fetching clusters:",e),[]}}async function c(e){let{clusterName:t,jobId:a,onNewLog:s}=e;try{let e=(await fetch("".concat(n.f4,"/logs"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({follow:!1,cluster_name:t,job_id:a})})).body.getReader();for(;;){let{done:t,value:a}=await e.read();if(t)break;let r=new TextDecoder().decode(a);s(r)}}catch(e){console.error("Error in streamClusterJobLogs:",e),(0,r.C)("Error in streamClusterJobLogs: ".concat(e.message),"error")}}async function i(e){let{clusterName:t}=e;try{let e=(await fetch("".concat(n.f4,"/queue"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({cluster_name:t,all_users:!0})})).headers.get("x-request-id"),a=await fetch("".concat(n.f4,"/api/get?request_id=").concat(e)),s=await a.json();return JSON.parse(s.return_value).map(e=>{let a=e.end_at?e.end_at:Date.now()/1e3,s=0,r=0;return e.submitted_at&&(s=a-e.submitted_at),e.start_at&&(r=a-e.start_at),{id:e.job_id,status:e.status,job:e.job_name,user:e.username,gpus:e.accelerators||{},submitted_at:e.submitted_at?new Date(1e3*e.submitted_at):null,resources:e.resources,cluster:t,total_duration:s,job_duration:r,infra:"",logs:""}})}catch(e){return console.error("Error fetching cluster jobs:",e),[]}}function d(e){let{cluster:t,job:a=null}=e,[r,n]=(0,s.useState)(null),[o,c]=(0,s.useState)(null),[d,u]=(0,s.useState)(!0),[f,m]=(0,s.useState)(!0),x=(0,s.useCallback)(async()=>{if(t)try{u(!0);let e=await l({clusterNames:[t]});n(e[0])}catch(e){console.error("Error fetching cluster data:",e)}finally{u(!1)}},[t]),h=(0,s.useCallback)(async()=>{if(t)try{m(!0);let e=await i({clusterName:t,job:a});c(e)}catch(e){console.error("Error fetching cluster job data:",e)}finally{m(!1)}},[t,a]),p=(0,s.useCallback)(async()=>{await Promise.all([x(),h()])},[x,h]);return(0,s.useEffect)(()=>{x(),h()},[t,a,x,h]),{clusterData:r,clusterJobData:o,loading:d||f,refreshData:p}}},4545:function(e,t,a){function s(e){return e.startsWith("sky-jobs-controller-")}function r(e,t,a){return null===t?e:[...e].sort((e,s)=>e[t]<s[t]?"ascending"===a?-1:1:e[t]>s[t]?"ascending"===a?1:-1:0)}a.d(t,{R0:function(){return r},Ym:function(){return s}})}}]);
@@ -0,0 +1 @@
1
+ "use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[979],{9307:function(e,t,n){n.d(t,{Cl:function(){return l},OE:function(){return d}});var r=n(5893);n(7294);var s=n(8799),a=n(7469),o=n(3850);let l=e=>{switch(e){case"LAUNCHING":return"bg-blue-100 text-sky-blue";case"RUNNING":return"bg-green-50 text-green-700";case"STOPPED":return"bg-yellow-100 text-yellow-800";case"TERMINATED":default:return"bg-gray-100 text-gray-800";case"PENDING":case"CANCELLED":case"CANCELLING":return"bg-yellow-50 text-yellow-700";case"SUCCEEDED":return"bg-blue-50 text-blue-700";case"FAILED":case"FAILED_PRECHECKS":case"FAILED_NO_RESOURCE":case"FAILED_CONTROLLER":return"bg-red-50 text-red-700";case"RECOVERING":return"bg-orange-50 text-orange-700";case"SUBMITTED":return"bg-indigo-50 text-indigo-700";case"STARTING":return"bg-cyan-50 text-cyan-700";case"FAILED_SETUP":return"bg-pink-50 text-pink-700"}},i=e=>{switch(e){case"LAUNCHING":case"STARTING":return(0,r.jsx)(s.Z,{size:12,className:"w-3 h-3 mr-1"});case"RUNNING":default:return(0,r.jsx)(o.W2,{className:"w-3 h-3 mr-1"});case"STOPPED":return(0,r.jsx)(o.fp,{className:"w-3 h-3 mr-1"});case"TERMINATED":case"FAILED":case"CANCELLED":return(0,r.jsx)(o.Ps,{className:"w-3 h-3 mr-1"});case"SUCCEEDED":return(0,r.jsx)(o.Ye,{className:"w-3 h-3 mr-1"});case"PENDING":case"RECOVERING":case"SUBMITTED":case"CANCELLING":case"FAILED_SETUP":case"FAILED_PRECHECKS":case"FAILED_NO_RESOURCE":case"FAILED_CONTROLLER":return(0,r.jsx)(o.J$,{className:"w-3 h-3 mr-1"})}},c=e=>{let t=l(e),n=i(e);return(0,r.jsxs)("span",{className:"".concat("inline-flex items-center px-2 py-1 rounded-full text-sm"," ").concat(t),children:[n,e]})},d=e=>{let{status:t}=e;return(0,r.jsx)(a.WH,{content:t,className:"text-muted-foreground text-sm",children:(0,r.jsx)("span",{children:c(t)})})}},3850:function(e,t,n){n.d(t,{J$:function(){return o},Ps:function(){return s},QT:function(){return c},Vp:function(){return d},W2:function(){return a},Ye:function(){return l},aD:function(){return f},fp:function(){return i},fy:function(){return x},h0:function(){return h},mU:function(){return m},yN:function(){return u}});var r=n(5893);function s(e){return(0,r.jsx)("svg",{...e,xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"currentColor",stroke:"currentColor",strokeWidth:"0",strokeLinecap:"round",strokeLinejoin:"round",children:(0,r.jsx)("rect",{width:"18",height:"18",x:"3",y:"3",rx:"2"})})}function a(e){return(0,r.jsx)("svg",{...e,xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"currentColor",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:(0,r.jsx)("circle",{cx:"10",cy:"10",r:"8"})})}function o(e){return(0,r.jsx)("svg",{...e,xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:(0,r.jsx)("circle",{cx:"10",cy:"10",r:"8"})})}function l(e){return(0,r.jsx)("svg",{...e,xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"5",strokeLinecap:"round",strokeLinejoin:"round",children:(0,r.jsx)("path",{d:"M6 12l4 4 8-8"})})}function i(e){return(0,r.jsxs)("svg",{...e,xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"currentColor",stroke:"currentColor",strokeWidth:"0",strokeLinecap:"round",strokeLinejoin:"round",children:[(0,r.jsx)("rect",{x:"6",y:"5",width:"4",height:"14",rx:"1"}),(0,r.jsx)("rect",{x:"14",y:"5",width:"4",height:"14",rx:"1"})]})}function c(e){return(0,r.jsxs)("svg",{...e,xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[(0,r.jsx)("rect",{width:"20",height:"8",x:"2",y:"2",rx:"2",ry:"2"}),(0,r.jsx)("rect",{width:"20",height:"8",x:"2",y:"14",rx:"2",ry:"2"}),(0,r.jsx)("line",{x1:"6",x2:"6.01",y1:"6",y2:"6"}),(0,r.jsx)("line",{x1:"6",x2:"6.01",y1:"18",y2:"18"})]})}function d(e){return(0,r.jsxs)("svg",{...e,xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[(0,r.jsx)("path",{d:"M16 20V4a2 2 0 0 0-2-2h-4a2 2 0 0 0-2 2v16"}),(0,r.jsx)("rect",{width:"20",height:"14",x:"2",y:"6",rx:"2"})]})}function u(e){return(0,r.jsxs)("svg",{...e,viewBox:"0 0 423.683 423.683",width:"24",height:"24",xmlns:"http://www.w3.org/2000/svg",xmlnsXlink:"http://www.w3.org/1999/xlink",xmlSpace:"preserve",fill:"currentColor",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[(0,r.jsx)("g",{id:"SVGRepo_bgCarrier",strokeWidth:"0"}),(0,r.jsx)("g",{id:"SVGRepo_tracerCarrier",strokeLinecap:"round",strokeLinejoin:"round"}),(0,r.jsx)("g",{id:"SVGRepo_iconCarrier",children:(0,r.jsx)("g",{children:(0,r.jsx)("path",{d:"M54.376,287.577h310.459c26.48,0,48.02-13.979,48.02-40.453c0-17.916-10.001-34.07-25.559-42.292 c-19.021-72.951-86.061-125.196-162.002-125.223v-3.431h-3.854V61.814h3.854v-9.569h-31.38v9.569h3.854v14.363h-3.854v3.431 c-75.941,0.026-142.97,52.272-161.988,125.217c-15.56,8.216-25.573,24.376-25.573,42.291 C6.36,273.597,27.896,287.577,54.376,287.577z M47.676,227.145l7.214-2.424l1.617-7.447 c13.884-64.232,71.707-110.862,137.467-110.862h31.274c65.763,0,123.582,46.63,137.473,110.862l1.607,7.447l7.223,2.424 c8.678,2.92,14.506,10.946,14.506,19.979c0,11.703-9.517,13.647-21.221,13.647H54.376c-11.7,0-21.22-1.944-21.22-13.647 C33.162,238.091,38.984,230.065,47.676,227.145z M423.683,334.602v36.836H0v-36.836h25.348v-18.418h372.99v18.418H423.683z"})})})]})}function h(e){return(0,r.jsxs)("svg",{...e,xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[(0,r.jsx)("path",{d:"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"}),(0,r.jsx)("polyline",{points:"15 3 21 3 21 9"}),(0,r.jsx)("line",{x1:"10",y1:"14",x2:"21",y2:"3"})]})}function x(e){return(0,r.jsx)("svg",{...e,xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"currentColor",children:(0,r.jsx)("path",{d:"M12 0c-6.626 0-12 5.373-12 12 0 5.302 3.438 9.8 8.207 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23.957-.266 1.983-.399 3.003-.404 1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v3.293c0 .319.192.694.801.576 4.765-1.589 8.199-6.086 8.199-11.386 0-6.627-5.373-12-12-12z"})})}function m(e){return(0,r.jsx)("svg",{...e,xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"currentColor",children:(0,r.jsx)("path",{transform:"scale(0.85) translate(1.8, 1.8)",d:"M5.042 15.165a2.528 2.528 0 0 1-2.52 2.523A2.528 2.528 0 0 1 0 15.165a2.527 2.527 0 0 1 2.522-2.52h2.52v2.52zM6.313 15.165a2.527 2.527 0 0 1 2.521-2.52 2.527 2.527 0 0 1 2.521 2.52v6.313A2.528 2.528 0 0 1 8.834 24a2.528 2.528 0 0 1-2.521-2.522v-6.313zM8.834 5.042a2.528 2.528 0 0 1-2.521-2.52A2.528 2.528 0 0 1 8.834 0a2.528 2.528 0 0 1 2.521 2.522v2.52H8.834zM8.834 6.313a2.528 2.528 0 0 1 2.521 2.521 2.528 2.528 0 0 1-2.521 2.521H2.522A2.528 2.528 0 0 1 0 8.834a2.528 2.528 0 0 1 2.522-2.521h6.312zM18.956 8.834a2.528 2.528 0 0 1 2.522-2.521A2.528 2.528 0 0 1 24 8.834a2.528 2.528 0 0 1-2.522 2.521h-2.522V8.834zM17.688 8.834a2.528 2.528 0 0 1-2.523 2.521 2.527 2.527 0 0 1-2.52-2.521V2.522A2.527 2.527 0 0 1 15.165 0a2.528 2.528 0 0 1 2.523 2.522v6.312zM15.165 18.956a2.528 2.528 0 0 1 2.523 2.522A2.528 2.528 0 0 1 15.165 24a2.527 2.527 0 0 1-2.52-2.522v-2.522h2.52zM15.165 17.688a2.527 2.527 0 0 1-2.52-2.523 2.526 2.526 0 0 1 2.52-2.52h6.313A2.527 2.527 0 0 1 24 15.165a2.528 2.528 0 0 1-2.522 2.523h-6.313z"})})}function f(e){return(0,r.jsx)("svg",{...e,stroke:"currentColor",fill:"currentColor",strokeWidth:"0",viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg",children:(0,r.jsxs)("g",{children:[(0,r.jsx)("path",{fill:"none",d:"M0 0h24v24H0z"}),(0,r.jsx)("path",{d:"M6.455 19L2 22.5V4a1 1 0 0 1 1-1h18a1 1 0 0 1 1 1v14a1 1 0 0 1-1 1H6.455zM4 18.385L5.763 17H20V5H4v13.385zM11 13h2v2h-2v-2zm0-6h2v5h-2V7z"})]})})}n(7294)},9470:function(e,t,n){n.d(t,{A:function(){return w}});var r=n(5893),s=n(7294),a=n(5675),o=n.n(a),l=n(1163),i=n(1664),c=n.n(i),d=n(3850),u=n(3225),h=n(7469),x=n(3001);let m=(0,s.createContext)(null);function f(e){let{children:t}=e,[n,a]=(0,s.useState)(!0);return(0,r.jsx)(m.Provider,{value:{isSidebarOpen:n,toggleSidebar:()=>{a(e=>!e)}},children:t})}function p(){let e=(0,l.useRouter)(),t=(0,x.X)(),n=t=>e.pathname.startsWith(t),s=e=>{let r=n(e);return"inline-flex items-center border-b-2 ".concat(r?"border-transparent text-blue-600":"border-transparent hover:text-blue-600"," ").concat(t?"px-2 py-1":"px-1 pt-1 space-x-2")};return(0,r.jsx)("div",{className:"fixed top-0 left-0 right-0 bg-white z-30 h-14 px-4 border-b border-gray-200 shadow-sm",children:(0,r.jsxs)("div",{className:"flex items-center h-full",children:[(0,r.jsx)("div",{className:"flex items-center ".concat(t?"space-x-2 mr-2":"space-x-4 mr-6"),children:(0,r.jsx)(c(),{href:"/",className:"flex items-center px-1 pt-1 h-full",prefetch:!1,children:(0,r.jsx)("div",{className:"".concat(t?"h-16 w-16":"h-20 w-20"," flex items-center justify-center"),children:(0,r.jsx)(o(),{src:"".concat(u.GW,"/skypilot.svg"),alt:"SkyPilot Logo",width:80,height:80,priority:!0,className:"w-full h-full object-contain"})})})}),(0,r.jsxs)("div",{className:"flex items-center ".concat(t?"space-x-1":"space-x-2 md:space-x-6"," ").concat(t?"mr-2":"mr-6"),children:[(0,r.jsxs)(c(),{href:"/clusters",className:s("/clusters"),prefetch:!1,children:[(0,r.jsx)(d.QT,{className:"w-4 h-4"}),!t&&(0,r.jsx)("span",{children:"Clusters"})]}),(0,r.jsxs)(c(),{href:"/jobs",className:s("/jobs"),prefetch:!1,children:[(0,r.jsx)(d.Vp,{className:"w-4 h-4"}),!t&&(0,r.jsx)("span",{children:"Jobs"})]}),(0,r.jsxs)("div",{className:"inline-flex items-center ".concat(t?"px-2 py-1":"px-1 pt-1"," text-gray-400"),children:[(0,r.jsx)(d.yN,{className:"w-4 h-4"}),!t&&(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("span",{className:"ml-2",children:"Services"}),(0,r.jsx)("span",{className:"text-xs ml-2 px-1.5 py-0.5 bg-gray-100 text-gray-500 rounded",children:"Soon"})]})]})]}),(0,r.jsxs)("div",{className:"flex items-center space-x-1 ".concat(t?"ml-0":"ml-auto"),children:[(0,r.jsx)(h.WH,{content:"Documentation",className:"text-sm text-muted-foreground",children:(0,r.jsxs)("a",{href:"https://skypilot.readthedocs.io/en/latest/",target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center px-2 py-1 text-gray-600 hover:text-blue-600 transition-colors duration-150 cursor-pointer",title:"Docs",children:[!t&&(0,r.jsx)("span",{className:"mr-1",children:"Docs"}),(0,r.jsx)(d.h0,{className:"".concat(t?"w-4 h-4":"w-3.5 h-3.5")})]})}),(0,r.jsx)("div",{className:"border-l border-gray-200 h-6 mx-1"}),(0,r.jsx)(h.WH,{content:"GitHub Repository",className:"text-sm text-muted-foreground",children:(0,r.jsx)("a",{href:"https://github.com/skypilot-org/skypilot",target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center justify-center p-2 rounded-full text-gray-600 hover:bg-gray-100 transition-colors duration-150 cursor-pointer",title:"GitHub",children:(0,r.jsx)(d.fy,{className:"".concat(t?"w-4 h-4":"w-5 h-5")})})}),(0,r.jsx)(h.WH,{content:"Join Slack",className:"text-sm text-muted-foreground",children:(0,r.jsx)("a",{href:"https://slack.skypilot.co/",target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center justify-center p-2 rounded-full text-gray-600 hover:bg-gray-100 transition-colors duration-150 cursor-pointer",title:"Slack",children:(0,r.jsx)(d.mU,{className:"".concat(t?"w-4 h-4":"w-5 h-5")})})}),(0,r.jsx)(h.WH,{content:"Leave Feedback",className:"text-sm text-muted-foreground",children:(0,r.jsx)("a",{href:"https://github.com/skypilot-org/skypilot/issues/new",target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center justify-center p-2 rounded-full text-gray-600 hover:bg-gray-100 transition-colors duration-150 cursor-pointer",title:"Leave Feedback",children:(0,r.jsx)(d.aD,{className:"".concat(t?"w-4 h-4":"w-5 h-5")})})})]})]})})}function g(e){let{children:t,highlighted:n}=e;return(0,x.X)(),(0,r.jsxs)("div",{className:"min-h-screen bg-gray-50",children:[(0,r.jsx)("div",{className:"fixed top-0 left-0 right-0 z-50 shadow-sm",children:(0,r.jsx)(p,{})}),(0,r.jsx)("div",{className:"transition-all duration-200 ease-in-out min-h-screen",style:{paddingTop:"56px"},children:(0,r.jsx)("main",{className:"p-6",children:t})})]})}function w(e){return(0,r.jsx)(f,{children:(0,r.jsx)(g,{...e})})}},7673:function(e,t,n){n.d(t,{Zb:function(){return o}});var r=n(5893),s=n(7294),a=n(2350);let o=s.forwardRef((e,t)=>{let{className:n,...s}=e;return(0,r.jsx)("div",{ref:t,className:(0,a.cn)("rounded-lg border bg-card text-card-foreground shadow-sm",n),...s})});o.displayName="Card",s.forwardRef((e,t)=>{let{className:n,...s}=e;return(0,r.jsx)("div",{ref:t,className:(0,a.cn)("flex flex-col space-y-1.5 p-6",n),...s})}).displayName="CardHeader",s.forwardRef((e,t)=>{let{className:n,...s}=e;return(0,r.jsx)("h3",{ref:t,className:(0,a.cn)("text-2xl font-semibold leading-none tracking-tight",n),...s})}).displayName="CardTitle",s.forwardRef((e,t)=>{let{className:n,...s}=e;return(0,r.jsx)("p",{ref:t,className:(0,a.cn)("text-sm text-muted-foreground",n),...s})}).displayName="CardDescription",s.forwardRef((e,t)=>{let{className:n,...s}=e;return(0,r.jsx)("div",{ref:t,className:(0,a.cn)("p-6 pt-0",n),...s})}).displayName="CardContent",s.forwardRef((e,t)=>{let{className:n,...s}=e;return(0,r.jsx)("div",{ref:t,className:(0,a.cn)("flex items-center p-6 pt-0",n),...s})}).displayName="CardFooter"},7469:function(e,t,n){n.d(t,{WH:function(){return b},$B:function(){return E},LU:function(){return k},q8:function(){return C},GV:function(){return v}});var r=n(5893),s=n(7294),a=n(9515),o=n(1886),l=n(4461),i=n(5895),c=n(7242),d=n(282),u=n(2350);let h=l.fC;l.ZA;let x=l.B4,m=s.forwardRef((e,t)=>{let{className:n,children:s,...a}=e;return(0,r.jsxs)(l.xz,{ref:t,className:(0,u.cn)("flex h-10 w-full items-center justify-between rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1",n),...a,children:[s,(0,r.jsx)(l.JO,{asChild:!0,children:(0,r.jsx)(i.Z,{className:"h-4 w-4 opacity-50"})})]})});m.displayName=l.xz.displayName;let f=s.forwardRef((e,t)=>{let{className:n,...s}=e;return(0,r.jsx)(l.u_,{ref:t,className:(0,u.cn)("flex cursor-default items-center justify-center py-1",n),...s,children:(0,r.jsx)(c.Z,{className:"h-4 w-4"})})});f.displayName=l.u_.displayName;let p=s.forwardRef((e,t)=>{let{className:n,...s}=e;return(0,r.jsx)(l.$G,{ref:t,className:(0,u.cn)("flex cursor-default items-center justify-center py-1",n),...s,children:(0,r.jsx)(i.Z,{className:"h-4 w-4"})})});p.displayName=l.$G.displayName;let g=s.forwardRef((e,t)=>{let{className:n,children:s,position:a="popper",...o}=e;return(0,r.jsx)(l.h_,{children:(0,r.jsxs)(l.VY,{ref:t,className:(0,u.cn)("relative z-50 max-h-96 min-w-[8rem] overflow-hidden rounded-md border bg-popover text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2","popper"===a&&"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",n),position:a,...o,children:[(0,r.jsx)(f,{}),(0,r.jsx)(l.l_,{className:(0,u.cn)("p-1","popper"===a&&"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]"),children:s}),(0,r.jsx)(p,{})]})})});g.displayName=l.VY.displayName,s.forwardRef((e,t)=>{let{className:n,...s}=e;return(0,r.jsx)(l.__,{ref:t,className:(0,u.cn)("py-1.5 pl-8 pr-2 text-sm font-semibold",n),...s})}).displayName=l.__.displayName;let w=s.forwardRef((e,t)=>{let{className:n,children:s,...a}=e;return(0,r.jsxs)(l.ck,{ref:t,className:(0,u.cn)("relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",n),...a,children:[(0,r.jsx)("span",{className:"absolute left-2 flex h-3.5 w-3.5 items-center justify-center",children:(0,r.jsx)(l.wU,{children:(0,r.jsx)(d.Z,{className:"h-4 w-4"})})}),(0,r.jsx)(l.eT,{children:s})]})});function j(e){return e.charAt(0).toUpperCase()+e.slice(1)}function v(e){if(!e)return"N/A";let t=new Date;return 7>Math.abs((t-e)/864e5)?(0,r.jsx)(b,{content:N(e),className:"capitalize text-sm text-muted-foreground",children:j((0,o.B)(e,t,{addSuffix:!0}))}):(0,r.jsx)(b,{content:j(N(e)),className:"text-sm text-muted-foreground",children:j(e.toLocaleString("en-CA",{year:"numeric",month:"2-digit",day:"2-digit"}).replace(",",""))})}function N(e){return e.toLocaleString("en-CA",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit",hour12:!1,timeZoneName:"short"}).replace(",","")}w.displayName=l.ck.displayName,s.forwardRef((e,t)=>{let{className:n,...s}=e;return(0,r.jsx)(l.Z0,{ref:t,className:(0,u.cn)("-mx-1 my-1 h-px bg-muted",n),...s})}).displayName=l.Z0.displayName;let y={placement:"bottom",color:"default"},b=e=>{let{children:t,...n}=e,s=n.content;return n.content=void 0,(0,r.jsx)(a.e,{...y,...n,content:(0,r.jsx)("span",{className:"left-full w-max px-2 py-1 text-sm text-gray-100 bg-gray-500 text-sm capitalize rounded",children:s}),children:t})};function k(e){if(!e&&0!==e)return"-";let t=e=Math.floor(e),n="",r=0;for(let e of[{value:86400,label:"d"},{value:3600,label:"h"},{value:60,label:"m"},{value:1,label:"s"}])if(t>=e.value&&r<2){let s=Math.floor(t/e.value);n+="".concat(s).concat(e.label," "),t%=e.value,r++}return n.trim()||"0s"}function C(e){return e?(e=e.split("\n").filter(e=>!e.match(/<rich_.*?\[bold cyan\]/)&&!e.match(/<rich_.*>.*<\/rich_.*>/)&&!e.match(/├──/)&&!e.match(/└──/)).join("\n").replace(/\x1b\[([0-9]{1,2}(;[0-9]{1,2})?)?[mGKH]/g,"")).split("\n").map(e=>{let t=e.match(/^([IWED])\s+(\d{2}-\d{2}\s+\d{2}:\d{2}:\d{2})\s+([^:]+:\d+\])(.*)/);if(t){let[e,n,r,s,a]=t,o={I:"INFO",W:"WARNING",E:"ERROR",D:"DEBUG"}[n]||"";return'<span class="log-line '.concat(o,'"><span class="level">').concat(n,'</span><span class="timestamp">').concat(r,'</span><span class="location">').concat(s,'</span><span class="message">').concat(a,"</span></span>")}let n=e.match(/^(\([^)]+\))(.*)$/);if(n){let[e,t,r]=n;return'<span class="log-line"><span class="log-prefix">'.concat(t,'</span><span class="log-rest">').concat(r,"</span></span>")}return'<span class="log-line"><span class="message">'.concat(e,"</span></span>")}).join("\n"):""}function E(e){let{logs:t,controller:n=!1}=e,[a,o]=(0,s.useState)("all"),[l,i]=(0,s.useState)(t),[c,d]=(0,s.useState)([]);return(0,s.useEffect)(()=>{d(function(e){let t;let n=/\((head|worker\d+),/g,r=new Set;for(;null!==(t=n.exec(e));)r.add(t[1]);return Array.from(r).sort((e,t)=>"head"===e?-1:"head"===t?1:e.localeCompare(t,void 0,{numeric:!0,sensitivity:"base"}))}(t))},[t]),(0,s.useEffect)(()=>{"all"===a?i(t):i(t.split("\n").filter(e=>e.includes("(".concat(a,","))).join("\n"))},[a,t]),(0,r.jsxs)("div",{children:[(0,r.jsx)("style",{children:'\n .logs-container {\n background-color: #f7f7f7;\n padding: 16px;\n max-height: calc(100vh - 300px);\n overflow-y: auto;\n overflow-x: hidden;\n font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;\n line-height: 1.5;\n border-radius: 6px;\n min-height: fit-content;\n }\n\n .log-line {\n display: block;\n white-space: pre-wrap;\n margin: 2px 0;\n }\n\n .log-line .level {\n display: inline;\n width: 1ch;\n margin-right: 1ch;\n font-weight: bold;\n }\n\n .log-line.INFO .level {\n color: #2563eb;\n }\n\n .log-line.WARNING .level {\n color: #d97706;\n }\n\n .log-line.ERROR .level {\n color: #dc2626;\n }\n\n .log-line.DEBUG .level {\n color: #6b7280;\n }\n\n .log-line .timestamp {\n color: #059669;\n margin-right: 1ch;\n white-space: nowrap;\n }\n\n .log-line .location {\n color: #6366f1;\n margin-right: 1ch;\n white-space: nowrap;\n }\n\n .log-line .message {\n color: #111827;\n word-break: break-word;\n white-space: pre-wrap;\n }\n\n .log-line .log-prefix {\n color: #6366f1;\n font-weight: 500;\n }\n\n .log-line .log-rest {\n color: #111827;\n word-break: break-word;\n white-space: pre-wrap;\n }\n'}),!n&&(0,r.jsx)("div",{style:{marginBottom:"1rem"},children:(0,r.jsxs)(h,{onValueChange:e=>o(e),value:a,children:[(0,r.jsx)(m,{"aria-label":"Node",className:"focus:ring-0 focus:ring-offset-0",children:(0,r.jsx)(x,{placeholder:"Select Node"})}),(0,r.jsxs)(g,{children:[(0,r.jsx)(w,{value:"all",children:"All Nodes"}),c.map(e=>(0,r.jsx)(w,{value:e,children:e},e))]})]})}),(0,r.jsx)("div",{className:"logs-container",dangerouslySetInnerHTML:{__html:C(l)}})]})}},5821:function(e,t,n){n.d(t,{C:function(){return r}});function r(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"info",n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:5e3,r=document.getElementById("toast-container");r||((r=document.createElement("div")).id="toast-container",r.className="fixed top-0 right-0 p-4 z-[9999] flex flex-col items-end space-y-2",document.body.appendChild(r));let s=document.createElement("div");switch(s.className="rounded-md border-l-4 p-4 shadow-md flex items-center justify-between max-w-md w-full mb-2 pointer-events-auto",t){case"success":s.className+=" bg-green-100 border-green-500 text-green-800";break;case"error":s.className+=" bg-red-100 border-red-500 text-red-800";break;case"warning":s.className+=" bg-yellow-100 border-yellow-500 text-yellow-800";break;default:s.className+=" bg-blue-100 border-blue-500 text-blue-800"}return s.innerHTML='\n <div class="flex-1 mr-2">\n <p class="text-sm font-medium">'.concat(e,'</p>\n </div>\n <button class="text-gray-500 hover:text-gray-700 focus:outline-none" aria-label="Close toast">\n <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">\n <line x1="18" y1="6" x2="6" y2="18"></line>\n <line x1="6" y1="6" x2="18" y2="18"></line>\n </svg>\n </button>\n '),r.appendChild(s),s.querySelector("button").addEventListener("click",()=>{r.removeChild(s)}),setTimeout(()=>{r.contains(s)&&r.removeChild(s)},n),s}},3001:function(e,t,n){n.d(t,{X:function(){return s}});var r=n(7294);function s(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:768,[t,n]=(0,r.useState)(!1);return(0,r.useEffect)(()=>{let t=()=>{n(window.innerWidth<e)};return t(),window.addEventListener("resize",t),()=>{window.removeEventListener("resize",t)}},[e]),t}},2350:function(e,t,n){n.d(t,{cn:function(){return a}});var r=n(512),s=n(8388);function a(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];return(0,s.m6)((0,r.W)(t))}}}]);
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[826],{4966:function(e,s,t){(window.__NEXT_P=window.__NEXT_P||[]).push(["/clusters/[cluster]/[job]",function(){return t(190)}])},3266:function(e,s,t){"use strict";t.d(s,{QL:function(){return d},Sl:function(){return i},zd:function(){return l}});var r=t(7294),a=t(5821),n=t(3225);let c={UP:"RUNNING",STOPPED:"STOPPED",INIT:"LAUNCHING",null:"TERMINATED"};async function l(){let{clusterNames:e=null}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};try{let s=(await fetch("".concat(n.f4,"/status"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({cluster_names:e,all_users:!0})})).headers.get("x-request-id"),t=await fetch("".concat(n.f4,"/api/get?request_id=").concat(s)),r=await t.json();return(r.return_value?JSON.parse(r.return_value):[]).map(e=>({status:c[e.status],cluster:e.name,user:e.user_name,infra:e.cloud,region:e.region,cpus:e.cpus,mem:e.memory,gpus:e.accelerators,resources_str:e.resources_str,time:new Date(1e3*e.launched_at),num_nodes:e.nodes,jobs:[],events:[{time:new Date(1e3*e.launched_at),event:"Cluster created."}]}))}catch(e){return console.error("Error fetching clusters:",e),[]}}async function i(e){let{clusterName:s,jobId:t,onNewLog:r}=e;try{let e=(await fetch("".concat(n.f4,"/logs"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({follow:!1,cluster_name:s,job_id:t})})).body.getReader();for(;;){let{done:s,value:t}=await e.read();if(s)break;let a=new TextDecoder().decode(t);r(a)}}catch(e){console.error("Error in streamClusterJobLogs:",e),(0,a.C)("Error in streamClusterJobLogs: ".concat(e.message),"error")}}async function o(e){let{clusterName:s}=e;try{let e=(await fetch("".concat(n.f4,"/queue"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({cluster_name:s,all_users:!0})})).headers.get("x-request-id"),t=await fetch("".concat(n.f4,"/api/get?request_id=").concat(e)),r=await t.json();return JSON.parse(r.return_value).map(e=>{let t=e.end_at?e.end_at:Date.now()/1e3,r=0,a=0;return e.submitted_at&&(r=t-e.submitted_at),e.start_at&&(a=t-e.start_at),{id:e.job_id,status:e.status,job:e.job_name,user:e.username,gpus:e.accelerators||{},submitted_at:e.submitted_at?new Date(1e3*e.submitted_at):null,resources:e.resources,cluster:s,total_duration:r,job_duration:a,infra:"",logs:""}})}catch(e){return console.error("Error fetching cluster jobs:",e),[]}}function d(e){let{cluster:s,job:t=null}=e,[a,n]=(0,r.useState)(null),[c,i]=(0,r.useState)(null),[d,u]=(0,r.useState)(!0),[m,x]=(0,r.useState)(!0),h=(0,r.useCallback)(async()=>{if(s)try{u(!0);let e=await l({clusterNames:[s]});n(e[0])}catch(e){console.error("Error fetching cluster data:",e)}finally{u(!1)}},[s]),f=(0,r.useCallback)(async()=>{if(s)try{x(!0);let e=await o({clusterName:s,job:t});i(e)}catch(e){console.error("Error fetching cluster job data:",e)}finally{x(!1)}},[s,t]),j=(0,r.useCallback)(async()=>{await Promise.all([h(),f()])},[h,f]);return(0,r.useEffect)(()=>{h(),f()},[s,t,h,f]),{clusterData:a,clusterJobData:c,loading:d||m,refreshData:j}}},190:function(e,s,t){"use strict";t.r(s),t.d(s,{JobDetailPage:function(){return b}});var r=t(5893),a=t(7294),n=t(9470),c=t(7673),l=t(1664),i=t.n(l),o=t(1163),d=t(3266),u=t(7469),m=t(3626),x=t(8799),h=t(9307),f=t(3001);function j(e){let{cluster:s,job:t,jobData:a,onRefresh:n,isRefreshing:c,loading:l}=e,o=(0,f.X)();return(0,r.jsxs)("div",{className:"flex items-center justify-between mb-4 h-5",children:[(0,r.jsxs)("div",{className:"text-base flex items-center",children:[(0,r.jsx)(i(),{href:"/clusters",className:"text-sky-blue hover:underline",children:"Sky Clusters"}),(0,r.jsx)("span",{className:"mx-2 text-gray-500",children:"›"}),(0,r.jsx)(i(),{href:"/clusters/".concat(s),className:"text-sky-blue hover:underline",children:s}),(0,r.jsx)("span",{className:"mx-2 text-gray-500",children:"›"}),(0,r.jsxs)(i(),{href:"/clusters/".concat(s,"/").concat(t),className:"text-sky-blue hover:underline",children:[t,a.job&&"-"!=a.job?" (".concat(a.job,")"):""]})]}),(0,r.jsxs)("div",{className:"flex items-center",children:[(l||c)&&(0,r.jsxs)("div",{className:"flex items-center mr-2",children:[(0,r.jsx)(x.Z,{size:15,className:"mt-0"}),(0,r.jsx)("span",{className:"text-sm ml-2 text-gray-500",children:"Loading..."})]}),(0,r.jsx)(u.WH,{content:"Refresh",className:"text-muted-foreground",children:(0,r.jsxs)("button",{onClick:n,disabled:l||c,className:"text-sm text-sky-blue hover:text-sky-blue-bright font-medium mx-2 flex items-center",children:[(0,r.jsx)(m.Z,{className:"w-4 h-4 mr-1.5"}),!o&&(0,r.jsx)("span",{children:"Refresh"})]})})]})]})}function b(){let e=(0,o.useRouter)(),{cluster:s,job:t}=e.query,{clusterData:l,clusterJobData:f,loading:b,refreshData:N}=(0,d.QL)({cluster:s}),[g,y]=(0,a.useState)(!1),[v,p]=(0,a.useState)(!0),[_,w]=(0,a.useState)(!1),[S,E]=(0,a.useState)([]),[k,C]=(0,a.useState)(!1),T=(0,a.useMemo)(()=>["INIT","PENDING","SETTING_UP"],[]),P=(0,a.useMemo)(()=>{if(!f||!t)return!0;let e=f.find(e=>e.id==t);return e&&T.includes(e.status)},[f,t,T]);a.useEffect(()=>{!b&&v&&p(!1)},[b,v]),(0,a.useEffect)(()=>{let e=!0;return s&&t&&!P?(w(!0),(0,d.Sl)({clusterName:s,jobId:t,onNewLog:s=>{if(e){let e=(0,u.q8)(s);E(s=>[...s,e])}}}).then(()=>{e&&w(!1)}).catch(s=>{e&&(console.error("Error streaming logs:",s),w(!1))})):w(!1),()=>{e=!1}},[s,t,k,P]);let D=async()=>{y(!0),C(e=>!e),E([]);try{N&&await N()}catch(e){console.error("Error refreshing data:",e)}finally{y(!1)}};if(!e.isReady)return(0,r.jsx)("div",{children:"Loading..."});let O={id:t};if(l&&f){let e=f.find(e=>e.id==t);e&&(O={...e,infra:l.infra,cluster:l.cluster,user:l.user})}return(0,r.jsxs)(n.A,{highlighted:"clusters",children:[(0,r.jsx)(j,{cluster:s,job:t,jobData:O,onRefresh:D,isRefreshing:g,loading:b}),b&&v?(0,r.jsxs)("div",{className:"flex items-center justify-center h-64",children:[(0,r.jsx)(x.Z,{size:24,className:"mr-2"}),(0,r.jsx)("span",{children:"Loading..."})]}):(0,r.jsxs)("div",{className:"space-y-8",children:[(0,r.jsx)("div",{id:"details",children:(0,r.jsxs)(c.Zb,{children:[(0,r.jsx)("div",{className:"flex items-center justify-between px-4 pt-4",children:(0,r.jsx)("h2",{className:"text-lg font-semibold",children:"Details"})}),(0,r.jsx)("div",{className:"p-4",children:(0,r.jsxs)("div",{className:"grid grid-cols-2 gap-6",children:[(0,r.jsxs)("div",{children:[(0,r.jsx)("div",{className:"text-gray-600 font-medium text-base",children:"Job ID"}),(0,r.jsx)("div",{className:"text-base mt-1",children:O.id})]}),(0,r.jsxs)("div",{children:[(0,r.jsx)("div",{className:"text-gray-600 font-medium text-base",children:"Job Name"}),(0,r.jsx)("div",{className:"text-base mt-1",children:O.job})]}),(0,r.jsxs)("div",{children:[(0,r.jsx)("div",{className:"text-gray-600 font-medium text-base",children:"Status"}),(0,r.jsx)("div",{className:"text-base mt-1",children:(0,r.jsx)(h.OE,{status:O.status})})]}),(0,r.jsxs)("div",{children:[(0,r.jsx)("div",{className:"text-gray-600 font-medium text-base",children:"User"}),(0,r.jsx)("div",{className:"text-base mt-1",children:O.user})]}),O.resources&&(0,r.jsxs)("div",{children:[(0,r.jsx)("div",{className:"text-gray-600 font-medium text-base",children:"Resources"}),(0,r.jsx)("div",{className:"text-base mt-1",children:O.resources||"N/A"})]}),O.cluster&&(0,r.jsxs)("div",{children:[(0,r.jsx)("div",{className:"text-gray-600 font-medium text-base",children:"Cluster"}),(0,r.jsx)("div",{className:"text-base mt-1",children:(0,r.jsx)(i(),{href:"/clusters/".concat(O.cluster),className:"text-sky-blue hover:underline",children:O.cluster})})]})]})})]})}),(0,r.jsx)("div",{id:"logs",className:"mt-6",children:(0,r.jsxs)(c.Zb,{children:[(0,r.jsxs)("div",{className:"flex items-center justify-between px-4 pt-4",children:[(0,r.jsxs)("div",{className:"flex items-center",children:[(0,r.jsx)("h2",{className:"text-lg font-semibold",children:"Logs"}),(0,r.jsx)("span",{className:"ml-2 text-xs text-gray-500",children:"(Logs are not streaming; click refresh to fetch the latest logs.)"})]}),(0,r.jsx)(u.WH,{content:"Refresh logs",className:"text-muted-foreground",children:(0,r.jsx)("button",{onClick:()=>{C(e=>!e),E([])},disabled:_,className:"text-sky-blue hover:text-sky-blue-bright flex items-center",children:(0,r.jsx)(m.Z,{className:"w-4 h-4 ".concat(_?"animate-spin":"")})})})]}),(0,r.jsx)("div",{className:"p-4",children:P?(0,r.jsx)("div",{className:"bg-[#f7f7f7] flex items-center justify-center py-4 text-gray-500",children:(0,r.jsx)("span",{children:"Waiting for the job to start, please refresh after a while"})}):_?(0,r.jsxs)("div",{className:"flex items-center justify-center py-4",children:[(0,r.jsx)(x.Z,{size:20,className:"mr-2"}),(0,r.jsx)("span",{children:"Loading..."})]}):(0,r.jsx)("div",{className:"max-h-96 overflow-y-auto",children:(0,r.jsx)(u.$B,{logs:S.join("")})})})]})})]})]})}s.default=b}},function(e){e.O(0,[678,979,888,774,179],function(){return e(e.s=4966)}),_N_E=e.O()}]);
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[722],{8706:function(e,s,t){(window.__NEXT_P=window.__NEXT_P||[]).push(["/clusters/[cluster]",function(){return t(6996)}])},6996:function(e,s,t){"use strict";t.r(s);var l=t(5893),a=t(7294),i=t(8799),c=t(8236),n=t(1163),r=t(9470),d=t(1664),x=t.n(d),m=t(9037),u=t(9307),h=t(7673),j=t(3266),o=t(3626),N=t(7469),f=t(1266),v=t(3001);function b(e){let{clusterData:s,clusterJobData:t,loading:a}=e;return(0,l.jsxs)("div",{children:[(0,l.jsx)("div",{className:"mb-6",children:(0,l.jsxs)(h.Zb,{children:[(0,l.jsx)("div",{className:"flex items-center justify-between px-4 pt-4",children:(0,l.jsx)("h3",{className:"text-lg font-semibold",children:"Details"})}),(0,l.jsx)("div",{className:"p-4",children:(0,l.jsxs)("div",{className:"grid grid-cols-2 gap-6",children:[(0,l.jsxs)("div",{children:[(0,l.jsx)("div",{className:"text-gray-600 font-medium text-base",children:"Cluster"}),(0,l.jsx)("div",{className:"text-base mt-1",children:s.cluster})]}),(0,l.jsxs)("div",{children:[(0,l.jsx)("div",{className:"text-gray-600 font-medium text-base",children:"User"}),(0,l.jsx)("div",{className:"text-base mt-1",children:s.user})]}),(0,l.jsxs)("div",{children:[(0,l.jsx)("div",{className:"text-gray-600 font-medium text-base",children:"Status"}),(0,l.jsx)("div",{className:"text-base mt-1",children:(0,l.jsx)(u.OE,{status:s.status})})]}),(0,l.jsxs)("div",{children:[(0,l.jsx)("div",{className:"text-gray-600 font-medium text-base",children:"Resources"}),(0,l.jsx)("div",{className:"text-base mt-1",children:s.resources_str||"N/A"})]}),(0,l.jsxs)("div",{children:[(0,l.jsx)("div",{className:"text-gray-600 font-medium text-base",children:"Region"}),(0,l.jsx)("div",{className:"text-base mt-1",children:s.region||"N/A"})]})]})})]})}),(0,l.jsx)("div",{children:t&&(0,l.jsx)(c.L4,{clusterName:s.cluster,clusterJobData:t,loading:a})})]})}s.default=function(){let e=(0,n.useRouter)(),{cluster:s}=e.query,[t,c]=(0,a.useState)(!1),[d,u]=(0,a.useState)(!0),[h,g]=(0,a.useState)(!1),[y,p]=(0,a.useState)(!1),_=(0,v.X)(),{clusterData:w,clusterJobData:k,loading:S,refreshData:C}=(0,j.QL)({cluster:s});a.useEffect(()=>{!S&&d&&u(!1)},[S,d]);let O=async()=>{c(!0),await C(),c(!1)};return e.isReady?(0,l.jsxs)(r.A,{highlighted:"clusters",children:[(0,l.jsxs)("div",{className:"flex items-center justify-between mb-4 h-5",children:[(0,l.jsxs)("div",{className:"text-base flex items-center",children:[(0,l.jsx)(x(),{href:"/clusters",className:"text-sky-blue hover:underline",children:"Sky Clusters"}),(0,l.jsx)("span",{className:"mx-2 text-gray-500",children:"›"}),(0,l.jsx)(x(),{href:"/clusters/".concat(s),className:"text-sky-blue hover:underline",children:s})]}),(0,l.jsx)("div",{className:"text-sm flex items-center",children:(0,l.jsxs)("div",{className:"text-sm flex items-center",children:[(S||t)&&(0,l.jsxs)("div",{className:"flex items-center mr-4",children:[(0,l.jsx)(i.Z,{size:15,className:"mt-0"}),(0,l.jsx)("span",{className:"ml-2 text-gray-500",children:"Loading..."})]}),w&&(0,l.jsxs)("div",{className:"flex items-center space-x-4",children:[(0,l.jsx)(N.WH,{content:"Refresh",className:"text-sm text-muted-foreground",children:(0,l.jsxs)("button",{onClick:O,disabled:S||t,className:"text-sky-blue hover:text-sky-blue-bright font-medium inline-flex items-center",children:[(0,l.jsx)(o.Z,{className:"w-4 h-4 mr-1.5"}),!_&&(0,l.jsx)("span",{children:"Refresh"})]})}),(0,l.jsx)(m.GV,{withLabel:!0,cluster:w.cluster,status:w.status,onOpenSSHModal:()=>{g(!0)},onOpenVSCodeModal:()=>{p(!0)}})]})]})})]}),S&&d?(0,l.jsxs)("div",{className:"flex justify-center items-center py-12",children:[(0,l.jsx)(i.Z,{size:24,className:"mr-2"}),(0,l.jsx)("span",{className:"text-gray-500",children:"Loading..."})]}):w?(0,l.jsx)(b,{clusterData:w,clusterJobData:k,loading:S||t}):null,(0,l.jsx)(f.Oh,{isOpen:h,onClose:()=>g(!1),cluster:s}),(0,l.jsx)(f._R,{isOpen:y,onClose:()=>p(!1),cluster:s})]}):(0,l.jsx)("div",{children:"Loading..."})}}},function(e){e.O(0,[678,312,979,845,236,37,888,774,179],function(){return e(e.s=8706)}),_N_E=e.O()}]);
@@ -0,0 +1 @@
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[315],{479:function(e,t,s){(window.__NEXT_P=window.__NEXT_P||[]).push(["/jobs/[job]",function(){return s(8099)}])},8969:function(e,t,s){"use strict";s.d(t,{Ce:function(){return l},NJ:function(){return i},Pr:function(){return c},Vp:function(){return n}});var r=s(7294),a=s(5821),o=s(3225);async function n(){let{allUsers:e=!0}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};try{let t=(await fetch("".concat(o.f4,"/jobs/queue"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({all_users:e})})).headers.get("x-request-id"),s=await fetch("".concat(o.f4,"/api/get?request_id=").concat(t));if(500===s.status){try{let e=await s.json();if(e.detail&&e.detail.error)try{let t=JSON.parse(e.detail.error);if(t.type&&t.type===o.IV)return{jobs:[],controllerStopped:!0}}catch(e){console.error("Error parsing JSON:",e)}}catch(e){console.error("Error parsing JSON:",e)}return{jobs:[],controllerStopped:!1}}let r=await s.json();return{jobs:(r.return_value?JSON.parse(r.return_value):[]).map(e=>{let t=[];e.submitted_at&&t.push({time:new Date(1e3*e.submitted_at),event:"Job submitted."}),e.start_at&&t.push({time:new Date(1e3*e.start_at),event:"Job started."}),e.end_at&&("CANCELLING"==e.status||"CANCELLED"==e.status?t.push({time:new Date(1e3*e.end_at),event:"Job cancelled."}):t.push({time:new Date(1e3*e.end_at),event:"Job completed."})),e.last_recovered_at&&e.last_recovered_at!=e.start_at&&t.push({time:new Date(1e3*e.last_recovered_at),event:"Job recovered."});let s=(e.end_at?e.end_at:Date.now()/1e3)-e.submitted_at;return{id:e.job_id,task:e.task_name,name:e.job_name,job_duration:e.job_duration,total_duration:s,status:e.status,resources:e.resources,cluster:e.cluster_resources,region:e.region,recoveries:e.recovery_count,details:e.failure_reason,user:e.user_name,submitted_at:e.submitted_at?new Date(1e3*e.submitted_at):null,events:t}}),controllerStopped:!1}}catch(e){return console.error("Error fetching managed job data:",e),{jobs:[],controllerStopped:!1}}}function c(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,[t,s]=(0,r.useState)(null),[a,o]=(0,r.useState)(!0);return(0,r.useEffect)(()=>{(async function(){try{o(!0);let e=await n({allUsers:!0});s(e)}catch(e){console.error("Error fetching managed job data:",e)}finally{o(!1)}})()},[e]),{jobData:t,loading:a}}async function i(e){let{jobId:t,controller:s=!1,signal:r,onNewLog:n}=e,c=new Promise(e=>{setTimeout(()=>{e({timeout:!0})},1e4)}),i=(async()=>{try{let e=(await fetch("".concat(o.f4,"/jobs/logs"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({controller:s,follow:!1,job_id:t}),...r?{signal:r}:{}})).body.getReader();try{for(;;){let{done:t,value:s}=await e.read();if(t)break;let r=new TextDecoder().decode(s);n(r)}}finally{e.cancel()}return{timeout:!1}}catch(e){if("AbortError"===e.name)return{timeout:!1};throw e}})();if((await Promise.race([i,c])).timeout){(0,a.C)("Log request for job ".concat(t," timed out after ").concat(1e4,"ms"),"error");return}}async function l(e,t,s){let r="",n="",c="",i={};if("restartcontroller"===e)r="Restarting",n="restarted",c="jobs/queue",i={all_users:!0,refresh:!0},t="controller";else throw Error("Invalid action: ".concat(e));(0,a.C)("".concat(r," job ").concat(t,"..."),"info");try{try{let e=(await fetch("".concat(o.f4,"/").concat(c),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(i)})).headers.get("x-request-id"),l=await fetch("".concat(o.f4,"/api/get?request_id=").concat(e));if(200===l.status)(0,a.C)("Job ".concat(t," ").concat(n," successfully."),"success");else if(500===l.status)try{let e=await l.json();if(e.detail&&e.detail.error)try{let n=JSON.parse(e.detail.error);n.type&&n.type===o.B8?(0,a.C)("".concat(r," job ").concat(t," is not supported!"),"error",1e4):n.type&&n.type===o.h1?(0,a.C)("Cluster ".concat(s," does not exist."),"error"):n.type&&n.type===o.IV?(0,a.C)("Cluster ".concat(s," is not up."),"error"):(0,a.C)("".concat(r," job ").concat(t," failed: ").concat(n.type),"error")}catch(s){(0,a.C)("".concat(r," job ").concat(t," failed: ").concat(e.detail.error),"error")}else(0,a.C)("".concat(r," job ").concat(t," failed with no details."),"error")}catch(e){(0,a.C)("".concat(r," job ").concat(t," failed with parse error."),"error")}else(0,a.C)("".concat(r," job ").concat(t," failed with status ").concat(l.status,"."),"error")}catch(e){console.error("Fetch error:",e),(0,a.C)("Network error ".concat(r," job ").concat(t,": ").concat(e.message),"error")}}catch(e){console.error("Error in handleStop:",e),(0,a.C)("Critical error ".concat(r," job ").concat(t,": ").concat(e.message),"error")}}},8099:function(e,t,s){"use strict";s.r(t);var r=s(5893),a=s(7294),o=s(8799),n=s(1163),c=s(9470),i=s(7673),l=s(8969),d=s(1664),u=s.n(d),m=s(3626),h=s(7469),f=s(9307),x=s(3001);function j(e){let{jobData:t,activeTab:s,setIsLoadingLogs:n,setIsLoadingControllerLogs:c,isLoadingLogs:i,isLoadingControllerLogs:d}=e,[u,m]=(0,a.useState)([]),[x,j]=(0,a.useState)([]),g=["PENDING","SUBMITTED","STARTING"].includes(t.status),b=["PENDING","SUBMITTED"].includes(t.status),y=["RECOVERING"].includes(t.status);(0,a.useEffect)(()=>{m([])},[s,t.id]),(0,a.useEffect)(()=>{j([])},[s,t.id]);let N=(0,a.useCallback)((e,t,r,a)=>{let o=!0,n=new AbortController;return"logs"===e&&(g||y)||"controllerlogs"===e&&b?(a(!1),()=>{}):(s===e&&t&&(a(!0),(0,l.NJ)({jobId:t,controller:"controllerlogs"===e,signal:n.signal,onNewLog:e=>{if(o){let t=(0,h.q8)(e);r(e=>[...e,t])}}}).then(()=>{o&&a(!1)}).catch(t=>{o&&("AbortError"!==t.name&&(console.error("Error streaming ".concat(e,":"),t),t.message&&r(e=>[...e,"Error fetching logs: ".concat(t.message)])),a(!1))})),()=>{o=!1})},[s,g,b,y]);return((0,a.useEffect)(()=>N("logs",t.id,m,n),[s,t.id,N,n]),(0,a.useEffect)(()=>N("controllerlogs",t.id,j,c),[s,t.id,N,c]),"logs"===s)?(0,r.jsx)("div",{className:"max-h-96 overflow-y-auto",children:g?(0,r.jsx)("div",{className:"bg-[#f7f7f7] flex items-center justify-center py-4 text-gray-500",children:(0,r.jsx)("span",{children:"Waiting for the job to start, please refresh after a while"})}):y?(0,r.jsx)("div",{className:"bg-[#f7f7f7] flex items-center justify-center py-4 text-gray-500",children:(0,r.jsx)("span",{children:"Waiting for the job to recover, please refresh after a while"})}):i?(0,r.jsxs)("div",{className:"flex items-center justify-center py-4",children:[(0,r.jsx)(o.Z,{size:20,className:"mr-2"}),(0,r.jsx)("span",{children:"Loading..."})]}):(0,r.jsx)(h.$B,{logs:u.join("")})}):"controllerlogs"===s?(0,r.jsx)("div",{className:"max-h-96 overflow-y-auto",children:b?(0,r.jsx)("div",{className:"bg-[#f7f7f7] flex items-center justify-center py-4 text-gray-500",children:(0,r.jsx)("span",{children:"Waiting for the job controller process to start, please refresh after a while"})}):d?(0,r.jsxs)("div",{className:"flex items-center justify-center py-4",children:[(0,r.jsx)(o.Z,{size:20,className:"mr-2"}),(0,r.jsx)("span",{children:"Loading..."})]}):(0,r.jsx)(h.$B,{logs:x.join(""),controller:!0})}):(0,r.jsxs)("div",{className:"grid grid-cols-2 gap-6",children:[(0,r.jsxs)("div",{children:[(0,r.jsx)("div",{className:"text-gray-600 font-medium text-base",children:"Job ID"}),(0,r.jsx)("div",{className:"text-base mt-1",children:t.id})]}),(0,r.jsxs)("div",{children:[(0,r.jsx)("div",{className:"text-gray-600 font-medium text-base",children:"Job Name"}),(0,r.jsx)("div",{className:"text-base mt-1",children:t.name})]}),(0,r.jsxs)("div",{children:[(0,r.jsx)("div",{className:"text-gray-600 font-medium text-base",children:"Status"}),(0,r.jsx)("div",{className:"text-base mt-1",children:(0,r.jsx)(f.OE,{status:t.status})})]}),(0,r.jsxs)("div",{children:[(0,r.jsx)("div",{className:"text-gray-600 font-medium text-base",children:"User"}),(0,r.jsx)("div",{className:"text-base mt-1",children:t.user})]}),(0,r.jsxs)("div",{children:[(0,r.jsx)("div",{className:"text-gray-600 font-medium text-base",children:"Resources"}),(0,r.jsx)("div",{className:"text-base mt-1",children:t.resources||"N/A"})]}),(0,r.jsxs)("div",{children:[(0,r.jsx)("div",{className:"text-gray-600 font-medium text-base",children:"Cluster"}),(0,r.jsx)("div",{className:"text-base mt-1",children:t.cluster||"-"})]})]})}t.default=function(){var e;let t=(0,n.useRouter)(),{job:s,tab:d}=t.query,[f,g]=(0,a.useState)(0),{jobData:b,loading:y}=(0,l.Pr)(f),[N,p]=(0,a.useState)(!1),[v,w]=(0,a.useState)(!0),[_,C]=(0,a.useState)(!1),[L,E]=(0,a.useState)(!1),[S,k]=(0,a.useState)(!1),[I,T]=(0,a.useState)(!1),[J,D]=(0,a.useState)(!1),[O,R]=(0,a.useState)(0),[P,Z]=(0,a.useState)(0),q=(0,x.X)();a.useEffect(()=>{!y&&v&&w(!1)},[y,v]);let A=e=>{let t=document.getElementById(e);t&&t.scrollIntoView({behavior:"smooth"})};(0,a.useEffect)(()=>{T(!0)},[]),(0,a.useEffect)(()=>{if(!J){let e=new MutationObserver(()=>{let t=document.getElementById("logs-section"),s=document.getElementById("controller-logs-section");("logs"===d&&t||"controllerlogs"===d&&s)&&(D(!0),e.disconnect())});return e.observe(document.body,{childList:!0,subtree:!0}),()=>e.disconnect()}},[J,d]),(0,a.useEffect)(()=>{if(t.isReady&&I&&J&&!S){let e=setTimeout(()=>{"logs"===d?(A("logs-section"),k(!0)):"controllerlogs"===d&&(A("controller-logs-section"),k(!0))},800);return()=>clearTimeout(e)}},[t.isReady,d,S,I,J]),(0,a.useEffect)(()=>{k(!1),D(!1)},[d]);let B=async()=>{p(!0);try{g(e=>e+1),R(e=>e+1),Z(e=>e+1)}catch(e){console.error("Error refreshing data:",e)}finally{p(!1)}};if(!t.isReady)return(0,r.jsx)("div",{children:"Loading..."});let W=null==b?void 0:null===(e=b.jobs)||void 0===e?void 0:e.find(e=>String(e.id)===String(s));return(0,r.jsxs)(c.A,{highlighted:"jobs",children:[(0,r.jsxs)("div",{className:"flex items-center justify-between mb-4",children:[(0,r.jsxs)("div",{className:"text-base flex items-center",children:[(0,r.jsx)(u(),{href:"/jobs",className:"text-sky-blue hover:underline",children:"Managed Jobs"}),(0,r.jsx)("span",{className:"mx-2 text-gray-500",children:"›"}),(0,r.jsxs)(u(),{href:"/jobs/".concat(s),className:"text-sky-blue hover:underline",children:[s," ",(null==W?void 0:W.name)?"(".concat(W.name,")"):""]})]}),(0,r.jsxs)("div",{className:"text-sm flex items-center",children:[(y||N||_||L)&&(0,r.jsxs)("div",{className:"flex items-center mr-4",children:[(0,r.jsx)(o.Z,{size:15,className:"mt-0"}),(0,r.jsx)("span",{className:"ml-2 text-gray-500",children:"Loading..."})]}),(0,r.jsx)(h.WH,{content:"Refresh",className:"text-muted-foreground",children:(0,r.jsxs)("button",{onClick:B,disabled:y||N,className:"text-sky-blue hover:text-sky-blue-bright font-medium inline-flex items-center h-8",children:[(0,r.jsx)(m.Z,{className:"w-4 h-4 mr-1.5"}),!q&&(0,r.jsx)("span",{children:"Refresh"})]})})]})]}),y&&v?(0,r.jsxs)("div",{className:"flex items-center justify-center py-32",children:[(0,r.jsx)(o.Z,{size:20,className:"mr-2"}),(0,r.jsx)("span",{children:"Loading..."})]}):W?(0,r.jsxs)("div",{className:"space-y-8",children:[(0,r.jsx)("div",{id:"details-section",children:(0,r.jsxs)(i.Zb,{children:[(0,r.jsx)("div",{className:"flex items-center justify-between px-4 pt-4",children:(0,r.jsx)("h3",{className:"text-lg font-semibold",children:"Details"})}),(0,r.jsx)("div",{className:"p-4",children:(0,r.jsx)(j,{jobData:W,activeTab:"info",setIsLoadingLogs:C,setIsLoadingControllerLogs:E,isLoadingLogs:_,isLoadingControllerLogs:L})})]})}),(0,r.jsx)("div",{id:"logs-section",className:"mt-6",children:(0,r.jsxs)(i.Zb,{children:[(0,r.jsxs)("div",{className:"flex items-center justify-between px-4 pt-4",children:[(0,r.jsxs)("div",{className:"flex items-center",children:[(0,r.jsx)("h3",{className:"text-lg font-semibold",children:"Logs"}),(0,r.jsx)("span",{className:"ml-2 text-xs text-gray-500",children:"(Logs are not streaming; click refresh to fetch the latest logs.)"})]}),(0,r.jsx)(h.WH,{content:"Refresh logs",className:"text-muted-foreground",children:(0,r.jsx)("button",{onClick:()=>{R(e=>e+1)},disabled:_,className:"text-sky-blue hover:text-sky-blue-bright flex items-center",children:(0,r.jsx)(m.Z,{className:"w-4 h-4 ".concat(_?"animate-spin":"")})})})]}),(0,r.jsx)("div",{className:"p-4",children:(0,r.jsx)(j,{jobData:W,activeTab:"logs",setIsLoadingLogs:C,setIsLoadingControllerLogs:E,isLoadingLogs:_,isLoadingControllerLogs:L},O)})]})}),(0,r.jsx)("div",{id:"controller-logs-section",className:"mt-6",children:(0,r.jsxs)(i.Zb,{children:[(0,r.jsxs)("div",{className:"flex items-center justify-between px-4 pt-4",children:[(0,r.jsxs)("div",{className:"flex items-center",children:[(0,r.jsx)("h3",{className:"text-lg font-semibold",children:"Controller Logs"}),(0,r.jsx)("span",{className:"ml-2 text-xs text-gray-500",children:"(Logs are not streaming; click refresh to fetch the latest logs.)"})]}),(0,r.jsx)(h.WH,{content:"Refresh controller logs",className:"text-muted-foreground",children:(0,r.jsx)("button",{onClick:()=>{Z(e=>e+1)},disabled:L,className:"text-sky-blue hover:text-sky-blue-bright flex items-center",children:(0,r.jsx)(m.Z,{className:"w-4 h-4 ".concat(L?"animate-spin":"")})})})]}),(0,r.jsx)("div",{className:"p-4",children:(0,r.jsx)(j,{jobData:W,activeTab:"controllerlogs",setIsLoadingLogs:C,setIsLoadingControllerLogs:E,isLoadingLogs:_,isLoadingControllerLogs:L},P)})]})})]}):(0,r.jsx)("div",{className:"flex items-center justify-center py-32",children:(0,r.jsx)("span",{children:"Job not found"})})]})}}},function(e){e.O(0,[678,979,888,774,179],function(){return e(e.s=479)}),_N_E=e.O()}]);