skypilot-nightly 1.0.0.dev20250423__py3-none-any.whl → 1.0.0.dev20250425__py3-none-any.whl

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 (54) hide show
  1. sky/__init__.py +2 -2
  2. sky/adaptors/aws.py +57 -4
  3. sky/adaptors/common.py +2 -1
  4. sky/adaptors/kubernetes.py +14 -9
  5. sky/backends/backend_utils.py +5 -1
  6. sky/cli.py +10 -1
  7. sky/client/cli.py +10 -1
  8. sky/client/sdk.py +14 -1
  9. sky/clouds/aws.py +3 -4
  10. sky/clouds/gcp.py +5 -2
  11. sky/clouds/service_catalog/data_fetchers/fetch_aws.py +3 -2
  12. sky/dag.py +5 -2
  13. sky/dashboard/out/404.html +1 -1
  14. sky/dashboard/out/_next/static/chunks/236-2db3ee3fba33dd9e.js +6 -0
  15. sky/dashboard/out/_next/static/chunks/37-0a572fe0dbb89c4d.js +6 -0
  16. sky/dashboard/out/_next/static/chunks/845-9e60713e0c441abc.js +1 -0
  17. sky/dashboard/out/_next/static/chunks/979-7bf73a4c7cea0f5c.js +1 -0
  18. sky/dashboard/out/_next/static/chunks/pages/clusters/[cluster]/[job]-6ac338bc2239cb45.js +1 -0
  19. sky/dashboard/out/_next/static/chunks/pages/clusters/[cluster]-f383db7389368ea7.js +1 -0
  20. sky/dashboard/out/_next/static/chunks/pages/jobs/[job]-1c519e1afc523dc9.js +1 -0
  21. sky/dashboard/out/_next/static/css/c6933bbb2ce7f4dd.css +3 -0
  22. sky/dashboard/out/_next/static/hTtTTWqHyRidxVG24ujEi/_buildManifest.js +1 -0
  23. sky/dashboard/out/clusters/[cluster]/[job].html +1 -1
  24. sky/dashboard/out/clusters/[cluster].html +1 -1
  25. sky/dashboard/out/clusters.html +1 -1
  26. sky/dashboard/out/favicon.ico +0 -0
  27. sky/dashboard/out/index.html +1 -1
  28. sky/dashboard/out/jobs/[job].html +1 -1
  29. sky/dashboard/out/jobs.html +1 -1
  30. sky/data/mounting_utils.py +11 -4
  31. sky/data/storage.py +4 -4
  32. sky/execution.py +1 -1
  33. sky/provision/aws/config.py +30 -11
  34. sky/provision/aws/instance.py +22 -10
  35. sky/server/server.py +13 -10
  36. sky/skylet/constants.py +12 -0
  37. sky/task.py +12 -4
  38. {skypilot_nightly-1.0.0.dev20250423.dist-info → skypilot_nightly-1.0.0.dev20250425.dist-info}/METADATA +1 -1
  39. {skypilot_nightly-1.0.0.dev20250423.dist-info → skypilot_nightly-1.0.0.dev20250425.dist-info}/RECORD +45 -45
  40. {skypilot_nightly-1.0.0.dev20250423.dist-info → skypilot_nightly-1.0.0.dev20250425.dist-info}/WHEEL +1 -1
  41. sky/dashboard/out/_next/static/68UjuSjrx8JvfzxUuf1-w/_buildManifest.js +0 -1
  42. sky/dashboard/out/_next/static/chunks/236-d437cf66e68a6f64.js +0 -6
  43. sky/dashboard/out/_next/static/chunks/37-72fdc8f71d6e4784.js +0 -6
  44. sky/dashboard/out/_next/static/chunks/845-2ea1cc63ba1f4067.js +0 -1
  45. sky/dashboard/out/_next/static/chunks/979-7cd0778078b9cfad.js +0 -1
  46. sky/dashboard/out/_next/static/chunks/pages/clusters/[cluster]/[job]-b09f7fbf6d5d74f6.js +0 -1
  47. sky/dashboard/out/_next/static/chunks/pages/clusters/[cluster]-b57ec043f09c5813.js +0 -1
  48. sky/dashboard/out/_next/static/chunks/pages/jobs/[job]-ef2e0e91a9222cac.js +0 -1
  49. sky/dashboard/out/_next/static/css/f3538cd90cfca88c.css +0 -3
  50. /sky/dashboard/out/_next/static/chunks/pages/{_app-3001e84c61acddfb.js → _app-e6b013bc3f77ad60.js} +0 -0
  51. /sky/dashboard/out/_next/static/{68UjuSjrx8JvfzxUuf1-w → hTtTTWqHyRidxVG24ujEi}/_ssgManifest.js +0 -0
  52. {skypilot_nightly-1.0.0.dev20250423.dist-info → skypilot_nightly-1.0.0.dev20250425.dist-info}/entry_points.txt +0 -0
  53. {skypilot_nightly-1.0.0.dev20250423.dist-info → skypilot_nightly-1.0.0.dev20250425.dist-info}/licenses/LICENSE +0 -0
  54. {skypilot_nightly-1.0.0.dev20250423.dist-info → skypilot_nightly-1.0.0.dev20250425.dist-info}/top_level.txt +0 -0
@@ -9,6 +9,7 @@ import logging
9
9
  from multiprocessing import pool
10
10
  import re
11
11
  import time
12
+ import typing
12
13
  from typing import Any, Callable, Dict, List, Optional, Set, TypeVar
13
14
 
14
15
  from sky import sky_logging
@@ -23,6 +24,11 @@ from sky.utils import resources_utils
23
24
  from sky.utils import status_lib
24
25
  from sky.utils import ux_utils
25
26
 
27
+ if typing.TYPE_CHECKING:
28
+ from botocore import waiter as botowaiter
29
+ import mypy_boto3_ec2
30
+ from mypy_boto3_ec2 import type_defs as ec2_type_defs
31
+
26
32
  logger = sky_logging.init_logger(__name__)
27
33
 
28
34
  _T = TypeVar('_T')
@@ -55,7 +61,9 @@ _RESUME_PER_INSTANCE_TIMEOUT = 120 # 2 minutes
55
61
  # https://aws.amazon.com/ec2/pricing/on-demand/#Data_Transfer_within_the_same_AWS_Region
56
62
 
57
63
 
58
- def _default_ec2_resource(region: str, check_credentials: bool = True) -> Any:
64
+ def _default_ec2_resource(
65
+ region: str,
66
+ check_credentials: bool = True) -> 'mypy_boto3_ec2.ServiceResource':
59
67
  if not hasattr(aws, 'version'):
60
68
  # For backward compatibility, reload the module if the aws module was
61
69
  # imported before and stale. Used for, e.g., a live jobs controller
@@ -99,7 +107,8 @@ def _default_ec2_resource(region: str, check_credentials: bool = True) -> Any:
99
107
  check_credentials=check_credentials)
100
108
 
101
109
 
102
- def _cluster_name_filter(cluster_name_on_cloud: str) -> List[Dict[str, Any]]:
110
+ def _cluster_name_filter(
111
+ cluster_name_on_cloud: str) -> List['ec2_type_defs.FilterTypeDef']:
103
112
  return [{
104
113
  'Name': f'tag:{constants.TAG_RAY_CLUSTER_NAME}',
105
114
  'Values': [cluster_name_on_cloud],
@@ -282,7 +291,7 @@ def run_instances(region: str, cluster_name_on_cloud: str,
282
291
 
283
292
  # sort tags by key to support deterministic unit test stubbing
284
293
  tags = dict(sorted(copy.deepcopy(config.tags).items()))
285
- filters = [{
294
+ filters: List['ec2_type_defs.FilterTypeDef'] = [{
286
295
  'Name': 'instance-state-name',
287
296
  'Values': ['pending', 'running', 'stopping', 'stopped'],
288
297
  }, {
@@ -551,7 +560,8 @@ def run_instances(region: str, cluster_name_on_cloud: str,
551
560
  created_instance_ids=created_instance_ids)
552
561
 
553
562
 
554
- def _filter_instances(ec2, filters: List[Dict[str, Any]],
563
+ def _filter_instances(ec2: 'mypy_boto3_ec2.ServiceResource',
564
+ filters: List['ec2_type_defs.FilterTypeDef'],
555
565
  included_instances: Optional[List[str]],
556
566
  excluded_instances: Optional[List[str]]):
557
567
  instances = ec2.instances.filter(Filters=filters)
@@ -616,7 +626,7 @@ def stop_instances(
616
626
  assert provider_config is not None, (cluster_name_on_cloud, provider_config)
617
627
  region = provider_config['region']
618
628
  ec2 = _default_ec2_resource(region)
619
- filters: List[Dict[str, Any]] = [
629
+ filters: List['ec2_type_defs.FilterTypeDef'] = [
620
630
  {
621
631
  'Name': 'instance-state-name',
622
632
  'Values': ['pending', 'running'],
@@ -653,7 +663,7 @@ def terminate_instances(
653
663
  managed_by_skypilot = provider_config['security_group'].get(
654
664
  'ManagedBySkyPilot', True)
655
665
  ec2 = _default_ec2_resource(region)
656
- filters = [
666
+ filters: List['ec2_type_defs.FilterTypeDef'] = [
657
667
  {
658
668
  'Name': 'instance-state-name',
659
669
  # exclude 'shutting-down' or 'terminated' states
@@ -671,6 +681,7 @@ def terminate_instances(
671
681
  filters,
672
682
  included_instances=None,
673
683
  excluded_instances=None)
684
+ instances_list = list(instances)
674
685
  instances.terminate()
675
686
  if (sg_name == aws_cloud.DEFAULT_SECURITY_GROUP_NAME or
676
687
  not managed_by_skypilot):
@@ -681,7 +692,7 @@ def terminate_instances(
681
692
  # If ports are specified, we need to delete the newly created Security
682
693
  # Group. Here we wait for all instances to be terminated, since the
683
694
  # Security Group dependent on them.
684
- for instance in instances:
695
+ for instance in instances_list:
685
696
  instance.wait_until_terminated()
686
697
  # TODO(suquark): Currently, the implementation of GCP and Azure will
687
698
  # wait util the cluster is fully terminated, while other clouds just
@@ -750,7 +761,7 @@ def open_ports(
750
761
  region = provider_config['region']
751
762
  ec2 = _default_ec2_resource(region)
752
763
  sg_name = provider_config['security_group']['GroupName']
753
- filters = [
764
+ filters: List['ec2_type_defs.FilterTypeDef'] = [
754
765
  {
755
766
  'Name': 'instance-state-name',
756
767
  # exclude 'shutting-down' or 'terminated' states
@@ -874,7 +885,7 @@ def wait_instances(region: str, cluster_name_on_cloud: str,
874
885
  ec2 = _default_ec2_resource(region)
875
886
  client = ec2.meta.client
876
887
 
877
- filters = [
888
+ filters: List['ec2_type_defs.FilterTypeDef'] = [
878
889
  {
879
890
  'Name': f'tag:{constants.TAG_RAY_CLUSTER_NAME}',
880
891
  'Values': [cluster_name_on_cloud],
@@ -903,6 +914,7 @@ def wait_instances(region: str, cluster_name_on_cloud: str,
903
914
  raise RuntimeError(
904
915
  f'No instances found for cluster {cluster_name_on_cloud}.')
905
916
 
917
+ waiter: 'botowaiter.Waiter'
906
918
  if state == status_lib.ClusterStatus.UP:
907
919
  waiter = client.get_waiter('instance_running')
908
920
  elif state == status_lib.ClusterStatus.STOPPED:
@@ -921,7 +933,7 @@ def get_cluster_info(
921
933
  provider_config: Optional[Dict[str, Any]] = None) -> common.ClusterInfo:
922
934
  """See sky/provision/__init__.py"""
923
935
  ec2 = _default_ec2_resource(region)
924
- filters = [
936
+ filters: List['ec2_type_defs.FilterTypeDef'] = [
925
937
  {
926
938
  'Name': 'instance-state-name',
927
939
  'Values': ['running'],
sky/server/server.py CHANGED
@@ -287,8 +287,8 @@ async def validate(validate_body: payloads.ValidateBody) -> None:
287
287
  # these into a single call or have a TTL cache for (task, admin_policy)
288
288
  # pairs.
289
289
  logger.debug(f'Validating tasks: {validate_body.dag}')
290
- try:
291
- dag = dag_utils.load_chain_dag_from_yaml_str(validate_body.dag)
290
+
291
+ def validate_dag(dag: dag_utils.dag_lib.Dag):
292
292
  # TODO: Admin policy may contain arbitrary code, which may be expensive
293
293
  # to run and may block the server thread. However, moving it into the
294
294
  # executor adds a ~150ms penalty on the local API server because of
@@ -296,14 +296,17 @@ async def validate(validate_body: payloads.ValidateBody) -> None:
296
296
  # server thread.
297
297
  dag, _ = admin_policy_utils.apply(
298
298
  dag, request_options=validate_body.request_options)
299
- for task in dag.tasks:
300
- # Will validate workdir and file_mounts in the backend, as those
301
- # need to be validated after the files are uploaded to the SkyPilot
302
- # API server with `upload_mounts_to_api_server`.
303
- task.validate_name()
304
- task.validate_run()
305
- for r in task.resources:
306
- r.validate()
299
+ # Skip validating workdir and file_mounts, as those need to be
300
+ # validated after the files are uploaded to the SkyPilot API server
301
+ # with `upload_mounts_to_api_server`.
302
+ dag.validate(skip_file_mounts=True, skip_workdir=True)
303
+
304
+ try:
305
+ dag = dag_utils.load_chain_dag_from_yaml_str(validate_body.dag)
306
+ loop = asyncio.get_running_loop()
307
+ # Apply admin policy and validate DAG is blocking, run it in a separate
308
+ # thread executor to avoid blocking the uvicorn event loop.
309
+ await loop.run_in_executor(None, validate_dag, dag)
307
310
  except Exception as e: # pylint: disable=broad-except
308
311
  raise fastapi.HTTPException(
309
312
  status_code=400, detail=exceptions.serialize_exception(e)) from e
sky/skylet/constants.py CHANGED
@@ -156,9 +156,21 @@ CONDA_INSTALLATION_COMMANDS = (
156
156
  # Caller should replace {conda_auto_activate} with either true or false.
157
157
  'conda config --set auto_activate_base {conda_auto_activate} && '
158
158
  'conda activate base; }; '
159
+ # If conda was not installed and the image is a docker image,
160
+ # we deactivate any active conda environment we set.
161
+ # Caller should replace {is_custom_docker} with either true or false.
162
+ 'if [ "{is_custom_docker}" = "true" ]; then '
163
+ 'conda deactivate;'
164
+ 'fi;'
159
165
  '}; '
166
+ # run this command only if the image is not a docker image assuming
167
+ # that if a user is using a docker image, they know what they are doing
168
+ # in terms of conda setup/activation.
169
+ # Caller should replace {is_custom_docker} with either true or false.
170
+ 'if [ "{is_custom_docker}" = "false" ]; then '
160
171
  'grep "# >>> conda initialize >>>" ~/.bashrc || '
161
172
  '{ conda init && source ~/.bashrc; };'
173
+ 'fi;'
162
174
  # Install uv for venv management and pip installation.
163
175
  f'{SKY_UV_INSTALL_CMD};'
164
176
  # Create a separate conda environment for SkyPilot dependencies.
sky/task.py CHANGED
@@ -315,12 +315,20 @@ class Task:
315
315
  if dag is not None:
316
316
  dag.add(self)
317
317
 
318
- def validate(self, workdir_only: bool = False):
319
- """Validate all fields of the task."""
318
+ def validate(self,
319
+ skip_file_mounts: bool = False,
320
+ skip_workdir: bool = False):
321
+ """Validate all fields of the task.
322
+
323
+ Args:
324
+ skip_file_mounts: Whether to skip validating file mounts.
325
+ skip_workdir: Whether to skip validating workdir.
326
+ """
320
327
  self.validate_name()
321
328
  self.validate_run()
322
- self.expand_and_validate_workdir()
323
- if not workdir_only:
329
+ if not skip_workdir:
330
+ self.expand_and_validate_workdir()
331
+ if not skip_file_mounts:
324
332
  self.expand_and_validate_file_mounts()
325
333
  for r in self.resources:
326
334
  r.validate()
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: skypilot-nightly
3
- Version: 1.0.0.dev20250423
3
+ Version: 1.0.0.dev20250425
4
4
  Summary: SkyPilot: An intercloud broker for the clouds
5
5
  Author: SkyPilot Team
6
6
  License: Apache 2.0
@@ -1,31 +1,31 @@
1
- sky/__init__.py,sha256=-KbF4PoXC1rxS6_Km-ti2aiL89uWU7E-q7FPiVJLdIo,6428
1
+ sky/__init__.py,sha256=VrEo4Ets-aqVc_PrmYSDD--DzjMLu6fOMyuoAB105cg,6428
2
2
  sky/admin_policy.py,sha256=hPo02f_A32gCqhUueF0QYy1fMSSKqRwYEg_9FxScN_s,3248
3
3
  sky/authentication.py,sha256=ND011K_-Ud1dVZF37A9KrwYir_ihJXcHc7iDWmuBc8Q,22872
4
4
  sky/check.py,sha256=PPNQnaaZBA9_aogJpN4gnG4XWnTqkd74c-rBYDkDRDY,16101
5
- sky/cli.py,sha256=-eDL9jSPUyxwxlj-npljVxcRVilMJUnW__iANuqk_hE,229045
5
+ sky/cli.py,sha256=fjiwc4joOwWTjrS-qifWFH3eiqj_0uaXTSngZpWrp94,229301
6
6
  sky/cloud_stores.py,sha256=Ln5GBpel-sEs7rVx7bBrMkfLwA_bctI05Rox2uoz7Lo,26388
7
7
  sky/core.py,sha256=2D1AhdZ1hyD6bBdLyF0t8UJS4ObkgYMwEteWC9_6ysc,47900
8
- sky/dag.py,sha256=Yl7Ry26Vql5cv4YMz8g9kOUgtoCihJnw7c8NgZYakMY,3242
8
+ sky/dag.py,sha256=8x-VMtjvSi0lYBemCMPLYq5ONljhoABjWzMKjmmdjSo,3369
9
9
  sky/exceptions.py,sha256=0PwVqsSz_ei48q7RSzrF1zVQmYrZ5vRfkYUpufZw1Yc,16960
10
- sky/execution.py,sha256=qJhDrgy4COdojU3SxYazcTE67QPWFrZdUhUvihloyng,28727
10
+ sky/execution.py,sha256=IWNUmPVpHGOMb_2D9p9o6iM4BDsALxKvs2N_TH2Zf9w,28731
11
11
  sky/global_user_state.py,sha256=7HADn0mY-0omf5RbpmAZ88bjySzqKcmiD1MEmkrCoNU,33754
12
12
  sky/models.py,sha256=bGMSATMkSMr_Kp6SCoiJVVeebwSdZuzjw_jrJzVWAAc,1603
13
13
  sky/optimizer.py,sha256=6bg3CB74pMvk30yQCE7zFSSudWmz78Cdd-IRbjGHBzA,58425
14
14
  sky/resources.py,sha256=T9kSL03149rIJs1LbfDwkZSIEpFL5uhceZTr2Nep78o,74719
15
15
  sky/sky_logging.py,sha256=Nmc29vvg-GgKRZcajNrGlkuCIFxrVqefdXTPiS7Y-9o,5914
16
16
  sky/skypilot_config.py,sha256=e1F6oShfQoEazEKZV-yqsBpQOHlLSW8fl0t3utOh8Ts,20379
17
- sky/task.py,sha256=tM-DpB7Mtxtc280gFIw9QvJfKEHgiIoew5rnNxxaj04,56737
17
+ sky/task.py,sha256=j0198ihAObG1BbzUAI9OroduORe69919rKHGdC0kFyU,56996
18
18
  sky/adaptors/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
19
- sky/adaptors/aws.py,sha256=6Qe_gvq8NZ4cHgD_5a6g3BSPsOd08wfww-QbLqyVd6A,7383
19
+ sky/adaptors/aws.py,sha256=4caUTO5nxZQyDVPyQdoPljaF-Lz_Fa6NEnu3FfmLZd4,8633
20
20
  sky/adaptors/azure.py,sha256=7l5jobSTsTUcTo3ptrgOpRgngHY92U64eQBPxvDe1HA,21986
21
21
  sky/adaptors/cloudflare.py,sha256=8XFjBKMusnR7EmteEGAsAAQUG4J0lDlqk7lkaum_5-4,8276
22
- sky/adaptors/common.py,sha256=o17TOFNLm1t0lQvZSJCF1C6RjD6ykKrQ-q1BLPX41XI,3027
22
+ sky/adaptors/common.py,sha256=-Qy2_QIGssDtRrakDX8pmnGkvDLtm3ejIsPtkMq8UT0,3058
23
23
  sky/adaptors/cudo.py,sha256=WGvIQrlzJkGDe02Ve7pygA56tHwUc4kwS3XHW8kMFAA,239
24
24
  sky/adaptors/do.py,sha256=dJ0BYbkQoUWVu6_9Pxq3fOu6PngjZyyCQzgjnODXLCA,777
25
25
  sky/adaptors/docker.py,sha256=_kzpZ0fkWHqqQAVVl0llTsCE31KYz3Sjn8psTBQHVkA,468
26
26
  sky/adaptors/gcp.py,sha256=oEb9jClEtApw6PQnxdxDYxOCYsedvM3aiko1EW1FDVo,3501
27
27
  sky/adaptors/ibm.py,sha256=7YbHrWbYcZsJDgxMBNZr1yBI03mjs_C3pnCTCz-MNtQ,5068
28
- sky/adaptors/kubernetes.py,sha256=ICkKQEFv5LahZYwX8pliCke1m9xj1aHrDmnvyAZ1tYw,7080
28
+ sky/adaptors/kubernetes.py,sha256=FIPzhhiwpnpRqMlDHO2XGhBlHce_ZktRdg7xTYRTmmM,7473
29
29
  sky/adaptors/nebius.py,sha256=PMDuqJ3SWLUUqtUgYLpCHOBJ-xucqptGforknSZr-54,6546
30
30
  sky/adaptors/oci.py,sha256=xJt6J9xBSFIENa6FwEt1V1sZE8puAZ_vPEoGlyQACPs,2839
31
31
  sky/adaptors/runpod.py,sha256=4Nt_BfZhJAKQNA3wO8cxvvNI8x4NsDGHu_4EhRDlGYQ,225
@@ -33,7 +33,7 @@ sky/adaptors/vast.py,sha256=tpvmHi7IkQNzbbHVkeo04kUSajoEpSzXr2XgeO_I1LU,695
33
33
  sky/adaptors/vsphere.py,sha256=zJP9SeObEoLrpgHW2VHvZE48EhgVf8GfAEIwBeaDMfM,2129
34
34
  sky/backends/__init__.py,sha256=UDjwbUgpTRApbPJnNfR786GadUuwgRk3vsWoVu5RB_c,536
35
35
  sky/backends/backend.py,sha256=wrVNzPkxDjHVAh46-iejBNe0nqx4DB6-Awtaqx5j2zs,7723
36
- sky/backends/backend_utils.py,sha256=9fMPPUrkEgRGN7ofAJnhlv6hGEQMoEB3m_BC0gto2VU,136273
36
+ sky/backends/backend_utils.py,sha256=sXrsmdRt_blpx_WIUnB_4d7GN6HX31LpB2J3HsdOZio,136518
37
37
  sky/backends/cloud_vm_ray_backend.py,sha256=M_1U_xWwdLxMr0HKfDi-AkUPO3-Rz3A0Us2JbRZjeW0,251477
38
38
  sky/backends/docker_utils.py,sha256=Hyw1YY20EyghhEbYx6O2FIMDcGkNzBzV9TM7LFynei8,8358
39
39
  sky/backends/local_docker_backend.py,sha256=m0s6EZ9dTbPO8STy9FeLj8DvvtI_44MwDK9QByh2jwU,17048
@@ -43,17 +43,17 @@ sky/benchmark/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
43
43
  sky/benchmark/benchmark_state.py,sha256=X8CXmuU9KgsDRhKedhFgjeRMUFWtQsjFs1qECvPG2yg,8723
44
44
  sky/benchmark/benchmark_utils.py,sha256=7rf-iHt6RXZ_pnBBWOMwcdodHQW69x27xNyx0yVog1U,26385
45
45
  sky/client/__init__.py,sha256=pz6xvVSd9X-gwqbsDL0E9QOojYqM0KAD0j-NCyCIF1k,38
46
- sky/client/cli.py,sha256=-eDL9jSPUyxwxlj-npljVxcRVilMJUnW__iANuqk_hE,229045
46
+ sky/client/cli.py,sha256=fjiwc4joOwWTjrS-qifWFH3eiqj_0uaXTSngZpWrp94,229301
47
47
  sky/client/common.py,sha256=E_5cjxd8fWRB7fU1yfIbiyQf-IyVhpD5KkB7Fl3cQEI,15215
48
- sky/client/sdk.py,sha256=NSuCYn84T-mx86nl7z-1qMwoWFlGXCvEmqd-HhfMAp4,70712
48
+ sky/client/sdk.py,sha256=j7DlaRudq7PpIkXX0UVj5iJBS9l2LTJ68Vgnd5mMdrM,71163
49
49
  sky/clouds/__init__.py,sha256=OW6mJ-9hpJSBORCgt2LippLQEYZHNfnBW1mooRNNvxo,1416
50
- sky/clouds/aws.py,sha256=Y5azSWJSSWq32CD6jhP5xTFlk-vg3sE4dMWcm5AQiQQ,54638
50
+ sky/clouds/aws.py,sha256=knUiTLsdVTF5Gc7YONkuF58HjOlzqwsuJrD22Q1nIB4,54583
51
51
  sky/clouds/azure.py,sha256=Zpo6ftWz_B30mX7N-An7JVO-8v7aU3f9cw1iH9phvwE,32251
52
52
  sky/clouds/cloud.py,sha256=22sfoOyGYjsBj88RHp-eHHs6aqi0xDb8q_9o_v6SIFM,36690
53
53
  sky/clouds/cudo.py,sha256=_UkLEtwJsfDMKlmJfML5W3rA8VArba4x8YGIdnvgZoM,13226
54
54
  sky/clouds/do.py,sha256=-jVrq5qXxaOROT2R2U0XoYiMfLT0J1wGNodzjzcTUSI,11586
55
55
  sky/clouds/fluidstack.py,sha256=jIqW1MLe55MVME1PATZm8e6_FsiTnJawW7OdytPW0aM,12666
56
- sky/clouds/gcp.py,sha256=aDkVXRl2hjrYVp8S0BLkkbvRF4Fl996uAsv7yOkN9wQ,57108
56
+ sky/clouds/gcp.py,sha256=IDYae-KrwBnTJUvsmakbQz0pdmn8lEbLtFoMVg5MAaM,57315
57
57
  sky/clouds/ibm.py,sha256=XtuPN8QgrwJdb1qb_b-7KwAE2tf_N9wh9eEfi2tcg-s,22013
58
58
  sky/clouds/kubernetes.py,sha256=K2O44w3LsIb6SqJFYyDmWd7HpK4K-cGHgrZ2BacdJJE,36754
59
59
  sky/clouds/lambda_cloud.py,sha256=H32vd30OfjXriH9SibVATrJZfZcCBTiWAXHfliGeMZk,12804
@@ -86,7 +86,7 @@ sky/clouds/service_catalog/vast_catalog.py,sha256=3QfbFx7b2UIjrMbvjPyhuc7ppaKC3h
86
86
  sky/clouds/service_catalog/vsphere_catalog.py,sha256=OV3Czi3vwRSW4lqVPHxU_GND0ox322gmhv3kb11Q8AM,4412
87
87
  sky/clouds/service_catalog/data_fetchers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
88
88
  sky/clouds/service_catalog/data_fetchers/analyze.py,sha256=VdksJQs3asFE8H5T3ZV1FJas2xD9WEX6c-V5p7y-wp4,2084
89
- sky/clouds/service_catalog/data_fetchers/fetch_aws.py,sha256=Zj4bqWPiDcT_ZFyHxQw_k7ORxWZrx91euar9kL0VPaI,23343
89
+ sky/clouds/service_catalog/data_fetchers/fetch_aws.py,sha256=OtMBQkfh6wIKGbaWt6cEDGdiDYsPKdNG5s4Wa9oz0xI,23413
90
90
  sky/clouds/service_catalog/data_fetchers/fetch_azure.py,sha256=7YVnoGDGGZI2TK02bj_LOoD4E5J5CFl6eqz2XlR4Vy8,12790
91
91
  sky/clouds/service_catalog/data_fetchers/fetch_cudo.py,sha256=52P48lvWN0s1ArjeLPeLemPRpxjSRcHincRle0nqdm4,3440
92
92
  sky/clouds/service_catalog/data_fetchers/fetch_fluidstack.py,sha256=hsqpQi_YUI-qil3zLCEGatrR7BkWzywr4otRdHrd-4k,7350
@@ -101,44 +101,44 @@ sky/clouds/utils/azure_utils.py,sha256=NToRBnhEyuUvb-nBnsKTxjhOBRkMcrelL8LK4w6s4
101
101
  sky/clouds/utils/gcp_utils.py,sha256=YtuS4EoAMvcRnGPgE_WLENPOPWIdvhp7dLceTw_zfas,7114
102
102
  sky/clouds/utils/oci_utils.py,sha256=0YxhgZdeIHQUI1AZ86YuswsZg5HdVCIVfSTRJsSHYI0,6396
103
103
  sky/clouds/utils/scp_utils.py,sha256=MqawUhhFHHxVnn29nOI4gJ_nF665ich4Po7bsy1afsA,15948
104
- sky/dashboard/out/404.html,sha256=rD3TwVd_efrkNjp7lbI7I_QHV8D1RDIADHC-yBpOiVM,2296
105
- sky/dashboard/out/clusters.html,sha256=m_IHTnn6zxytPbivhLU1A2Hnpe-He-8bEB1dGKLRWrg,11953
106
- sky/dashboard/out/favicon.ico,sha256=uYlvgxSM7gjBmXpZ8wydvZUPAbJiiix-rc2Xe5mma9s,15086
107
- sky/dashboard/out/index.html,sha256=FPVWZLNosLAhSqwlt4JVqPzHizIxbxg4rSIppiKEmEo,1407
108
- sky/dashboard/out/jobs.html,sha256=evm6VUGhofMxz4Y_PE1LdCeVg5CH9Sr-5aI481A90vU,13059
104
+ sky/dashboard/out/404.html,sha256=mJSAqioj8wok9kxfY8AX8aWF1SAWns7pqrKSOpyRkds,2296
105
+ sky/dashboard/out/clusters.html,sha256=pTQFp7Q1AoXGLwP5yAjlPlzjal4hxrae9CLLSVY4gDs,11739
106
+ sky/dashboard/out/favicon.ico,sha256=TOQ3bobTJzBo24JY6SBgVR3uoYxKd9XMtP9IL_bWS1k,42245
107
+ sky/dashboard/out/index.html,sha256=0rYE6peTCESfpLS3rW5kjKblnRXt3asWtW9kRMWsw2g,1407
108
+ sky/dashboard/out/jobs.html,sha256=UXLiC0-mB5mWfD4O6fRAI2ZEWw-RjVFV1-3IPIktL7w,12829
109
109
  sky/dashboard/out/skypilot.svg,sha256=c0iRtlfLlaUm2p0rG9NFmo5FN0Qhf3pq5Xph-AeMPJw,5064
110
- sky/dashboard/out/_next/static/68UjuSjrx8JvfzxUuf1-w/_buildManifest.js,sha256=Ok4yINvq-VFZbOefZBHPaavSf6DCdVryO-rPc9HNUkk,1048
111
- sky/dashboard/out/_next/static/68UjuSjrx8JvfzxUuf1-w/_ssgManifest.js,sha256=Z49s4suAsf5y_GfnQSvm4qtq2ggxEbZPfEDTXjy6XgA,80
112
- sky/dashboard/out/_next/static/chunks/236-d437cf66e68a6f64.js,sha256=ralyFxYHEJcbwyN11jVIZbvPFrrpAq34CXvKqRdhEoc,24814
110
+ sky/dashboard/out/_next/static/chunks/236-2db3ee3fba33dd9e.js,sha256=c6zARNqhT9VG1xQb_IXT_tuCvfGsglNIWWn93eCDkZo,24840
113
111
  sky/dashboard/out/_next/static/chunks/312-c3c8845990db8ffc.js,sha256=H8yGnoxM_IYM2kU-A7mESi4aV4Ph3PxbIdnM2v5Kd3M,25150
114
- sky/dashboard/out/_next/static/chunks/37-72fdc8f71d6e4784.js,sha256=XLVnZhTzv_QQZZeQX8IwNacGZme7FYFwo8e9e57gcAU,8051
112
+ sky/dashboard/out/_next/static/chunks/37-0a572fe0dbb89c4d.js,sha256=1w7y8HAPvOZ-KtEzw8mdTqqZvxUEMPJ8U-capQ-SH0c,8107
115
113
  sky/dashboard/out/_next/static/chunks/678-206dddca808e6d16.js,sha256=Y5VxbAyqp8zSfif94d1iDcS5_OXdBfb-YzwlmLu8kSg,325098
116
- sky/dashboard/out/_next/static/chunks/845-2ea1cc63ba1f4067.js,sha256=BY5vaqrPP00ILJ9tYQjmyi86uGsPXw4R8gwqIvx9e0Q,11710
117
- sky/dashboard/out/_next/static/chunks/979-7cd0778078b9cfad.js,sha256=LI1kJIHkHdqlKPpvzxknxHXfAxwqLk3JLkdBZGVp5Dw,23991
114
+ sky/dashboard/out/_next/static/chunks/845-9e60713e0c441abc.js,sha256=o__UxVSl0Lz2StwL3xPnPkAO83dfGf5MSx59w6ZSyKk,11753
115
+ sky/dashboard/out/_next/static/chunks/979-7bf73a4c7cea0f5c.js,sha256=1IY2VZuc9Z0KI0LjWZ2nkJ8SkMA-U1QXtHownMeLM8s,24031
118
116
  sky/dashboard/out/_next/static/chunks/fd9d1056-2821b0f0cabcd8bd.js,sha256=ce2WOATL1LdzsWouKQ-1NCiBQJmcykgzqP8wCp1yqbE,172831
119
117
  sky/dashboard/out/_next/static/chunks/framework-87d061ee6ed71b28.js,sha256=dh6TKdXcSRoGP4HqHe2uwzWCZBPz16dyTWufLsxeRvM,140942
120
118
  sky/dashboard/out/_next/static/chunks/main-app-241eb28595532291.js,sha256=P0_tU7pqs_pOQaw-lVzCNl6recBw5lFfkAD0jRk2uzc,115881
121
119
  sky/dashboard/out/_next/static/chunks/main-e0e2335212e72357.js,sha256=BxTmVbZDnMUQvQd57MEl1Ui0VZaNmwLOviY7h_xMjP0,109884
122
120
  sky/dashboard/out/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js,sha256=6QPOwdWeAVe8x-SsiDrm-Ga6u2DkqgG5SFqglrlyIgA,91381
123
121
  sky/dashboard/out/_next/static/chunks/webpack-830f59b8404e96b8.js,sha256=XUeLlCbpUyAJto3fy6kMg9YVoYn9KYpT1aFAuRmLcj8,3719
124
- sky/dashboard/out/_next/static/chunks/pages/_app-3001e84c61acddfb.js,sha256=4Yi0IhaBfZdZQBL-wf_JqkRQGpU71sF8dQ_C7noFhyk,1780
122
+ sky/dashboard/out/_next/static/chunks/pages/_app-e6b013bc3f77ad60.js,sha256=4Yi0IhaBfZdZQBL-wf_JqkRQGpU71sF8dQ_C7noFhyk,1780
125
123
  sky/dashboard/out/_next/static/chunks/pages/_error-1be831200e60c5c0.js,sha256=TZqrus06KKPx-CMABDMPKF7w-NQ5s2gwJAM8Huyl7qU,247
126
124
  sky/dashboard/out/_next/static/chunks/pages/clusters-a93b93e10b8b074e.js,sha256=b5qfh1__TcAs3hfe6y73Wo5tUDM_KGxmvNQDIILAEvc,411
127
125
  sky/dashboard/out/_next/static/chunks/pages/index-f9f039532ca8cbc4.js,sha256=xW_iAQgKnyCMwtiYNnk0D34hQLWD2L_ckiDsFs7Oyc8,481
128
126
  sky/dashboard/out/_next/static/chunks/pages/jobs-a75029b67aab6a2e.js,sha256=zqUV5xEPWl1_n_NplfQ3Ir8WXUvLTHZqyQP4KyeNgHA,408
129
- sky/dashboard/out/_next/static/chunks/pages/clusters/[cluster]-b57ec043f09c5813.js,sha256=u-qXXwLrsK72G1qVyrd8nCiyKmdBv61xrKmKvSess8Q,4025
130
- sky/dashboard/out/_next/static/chunks/pages/clusters/[cluster]/[job]-b09f7fbf6d5d74f6.js,sha256=KayTgi3_fkoZ5e94WDIrz40erkrn--G_2QzQyMNHhok,8887
131
- sky/dashboard/out/_next/static/chunks/pages/jobs/[job]-ef2e0e91a9222cac.js,sha256=BlAqhmjQdnDgnOeBE3KWZfATs7QZN68TOqYb2gSSxoQ,13152
132
- sky/dashboard/out/_next/static/css/f3538cd90cfca88c.css,sha256=y9a3IiJyaD6P_uZwLuCTQ6TJU0e85QIhNCbL-k4RIUc,31933
133
- sky/dashboard/out/clusters/[cluster].html,sha256=M0GtFwDFTylEoHi3UWYuLA1_hh4QEf88pS-lL1TlZHI,1984
134
- sky/dashboard/out/clusters/[cluster]/[job].html,sha256=QHC9hJFB6wbOz_3VIWu56KX5LsMDBRzCoMOWM4zDLxc,1653
135
- sky/dashboard/out/jobs/[job].html,sha256=tEuQU0SxKfOdCkV_CdnUq2jrDDD6p70m6aIjOGxi14E,1621
127
+ sky/dashboard/out/_next/static/chunks/pages/clusters/[cluster]-f383db7389368ea7.js,sha256=G_EpOBuv6eMIQNY7oVUXuYmZ6zLMQMBrXwkog1RoPAE,4051
128
+ sky/dashboard/out/_next/static/chunks/pages/clusters/[cluster]/[job]-6ac338bc2239cb45.js,sha256=ciMtxEIartNtC_Y66ZBfZj0todScMGOZ4XchdgesEwo,8913
129
+ sky/dashboard/out/_next/static/chunks/pages/jobs/[job]-1c519e1afc523dc9.js,sha256=oMjs5t_YqMrm-nDMPyazBuKyCKocY-Hp1pgWQ4_ncDc,13420
130
+ sky/dashboard/out/_next/static/css/c6933bbb2ce7f4dd.css,sha256=V9pn7LZ7uXLy3EQjFl-5MydGktBkn2yM4SWccJF9Sm0,31944
131
+ sky/dashboard/out/_next/static/hTtTTWqHyRidxVG24ujEi/_buildManifest.js,sha256=7uuHw3t0SwdYow3LY25GpA5209nWYOYSjxRWmQ5if60,1048
132
+ sky/dashboard/out/_next/static/hTtTTWqHyRidxVG24ujEi/_ssgManifest.js,sha256=Z49s4suAsf5y_GfnQSvm4qtq2ggxEbZPfEDTXjy6XgA,80
133
+ sky/dashboard/out/clusters/[cluster].html,sha256=NEpq3j_TbNa6A6X4jIMn-G13Uh6TnOARkg_7IeEzrgI,1984
134
+ sky/dashboard/out/clusters/[cluster]/[job].html,sha256=pbRWYGD-4njCD-lDRXBuIKsnyhvNdDFLIVmb3biTDvA,1653
135
+ sky/dashboard/out/jobs/[job].html,sha256=QvZzBM-UA24qH7JRmG3wtkhptKRUCVtrRNq4T_lFXq8,1621
136
136
  sky/dashboard/out/videos/cursor-small.mp4,sha256=8tRdp1vjawOrXUar1cfjOc-nkaKmcwCPZx_LO0XlCvQ,203285
137
137
  sky/data/__init__.py,sha256=Nhaf1NURisXpZuwWANa2IuCyppIuc720FRwqSE2oEwY,184
138
138
  sky/data/data_transfer.py,sha256=N8b0CQebDuHieXjvEVwlYmK6DbQxUGG1RQJEyTbh3dU,12040
139
139
  sky/data/data_utils.py,sha256=CNYPM963qby5ddW0DZNbhiWXkqgB9MHh_jrC5DoBctM,33437
140
- sky/data/mounting_utils.py,sha256=OoNegk56oKM2NYCE6ZVe1E41xYKYtRjNOiiyKzI0SVo,21622
141
- sky/data/storage.py,sha256=0gZHw73py4fW-2iyyuQxa3E7bwqMg5-Dh3-aEKf2PuQ,236592
140
+ sky/data/mounting_utils.py,sha256=6f1d0EeBj4dY-LQPwh8EtI6yoEHZawDgHaC8LChDS2s,21946
141
+ sky/data/storage.py,sha256=xumCpKDW-FELA0m0IXSrRpaAS2zV162NJWfy-ugCRjc,236587
142
142
  sky/data/storage_utils.py,sha256=u8PTKUkE7qYwr1GgAJ45pI5YUkhUaPQPRUz_CZZo_HI,13785
143
143
  sky/jobs/__init__.py,sha256=qoI53-xXE0-SOkrLWigvhgFXjk7dWE0OTqGPYIk-kmM,1458
144
144
  sky/jobs/constants.py,sha256=FLPAT02CmG7PLVPpYOUlbw1s_LgRdQiwdg2YBg8joFA,3305
@@ -165,8 +165,8 @@ sky/provision/logging.py,sha256=_sx_TH6nLt0FF3myS5pEZbiMhXyl4s1XwMidu_TTBUw,2091
165
165
  sky/provision/metadata_utils.py,sha256=LrxeV4wD2QPzNdXV_npj8q-pr35FatxBBjF_jSbpOT0,4013
166
166
  sky/provision/provisioner.py,sha256=xsdwfHxTmcHMAH-dyt0UsVHEgbweAlRImwVUQj7SZok,29953
167
167
  sky/provision/aws/__init__.py,sha256=mxq8PeWJqUtalDozTNpbtENErRZ1ktEs8uf2aG9UUgU,731
168
- sky/provision/aws/config.py,sha256=fGOkkn89EpVFYp4x0LTIauBem2Vsqcy8faEadS8l0nE,25979
169
- sky/provision/aws/instance.py,sha256=3okAJ1WkZ0YemH9kvUgA6HpHN6BP7unhDL-CHny1qFI,40849
168
+ sky/provision/aws/config.py,sha256=2PifaPQpD-2Kxqd6843sCUIjEhJR3lI3cJRXE1ox_ls,26728
169
+ sky/provision/aws/instance.py,sha256=TObnNcylnAfPhgiA1prSD2sQKbUoUsBA986r9nKStTU,41434
170
170
  sky/provision/aws/utils.py,sha256=LrjeQ09zA7GoMv9Nt8TlL2A3VqqChsgJ9bL-Q5VLaao,3401
171
171
  sky/provision/azure/__init__.py,sha256=87cgk1_Ws7n9rqaDDPv-HpfrkVeSQMdFQnhnXwyx9g4,548
172
172
  sky/provision/azure/azure-config-template.json,sha256=jrjAgOtpe0e6FSg3vsVqHKQqJe0w-HeWOFT1HuwzS2c,4712
@@ -264,7 +264,7 @@ sky/serve/server/server.py,sha256=A9K37a0nQgZeN3eKWv62Oh2C5TSAReTZ9pHmztqlI-c,43
264
264
  sky/server/__init__.py,sha256=MPPBqFzXz6Jv5QSk6td_IcvnfXfNErDZVcizu4MLRow,27
265
265
  sky/server/common.py,sha256=k5Be_Co9gI892iDvhYj6D__X-8_-RuEij5WlNiKDKJ4,27233
266
266
  sky/server/constants.py,sha256=Ha3A4X0kPh0FrdlM5u34Wi7OxhScPUwHqRi4-ye347Y,1112
267
- sky/server/server.py,sha256=DABDYs1drNLeQ1b5WMlD2f4XU1VrDNtvgh5pDmdZxcU,46757
267
+ sky/server/server.py,sha256=j2SHlmfkZv4hHHQUB_iXSAJN7tNjJgRIQDRTWWkH_hk,46935
268
268
  sky/server/stream_utils.py,sha256=4JMHgtoXPpCT8JwtqyUcDQ9IdZFir9om0JaCRr8rvbQ,5849
269
269
  sky/server/uvicorn.py,sha256=wajwPHJ3IEEP3GMNOCc0S81-1v2qT5F-ejUkLFVhUzk,2953
270
270
  sky/server/html/log.html,sha256=TSGZktua9Ysl_ysg3w60rjxAxhH61AJnsYDHdtqrjmI,6929
@@ -289,7 +289,7 @@ sky/skylet/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
289
289
  sky/skylet/attempt_skylet.py,sha256=GZ6ITjjA0m-da3IxXXfoHR6n4pjp3X3TOXUqVvSrV0k,2136
290
290
  sky/skylet/autostop_lib.py,sha256=kGUnHm-jpF4zl3UJfB-4pnoldWpnVeR96WwYGSw7em0,4630
291
291
  sky/skylet/configs.py,sha256=UtnpmEL0F9hH6PSjhsps7xgjGZ6qzPOfW1p2yj9tSng,1887
292
- sky/skylet/constants.py,sha256=kCUODpKMTIYn1x8hjhqJPnI__ZzKEpiMizzoY_pViNA,18446
292
+ sky/skylet/constants.py,sha256=FDeHCjVsFYbDYR43xLt30M6Rt1f6kAV3VhPAMk1ZSio,19052
293
293
  sky/skylet/events.py,sha256=pnV3ZiwWhXqTHpU5B5Y9Xwam_7FQDI6IrxgSx7X_NVA,12743
294
294
  sky/skylet/job_lib.py,sha256=LInoIK4M37ZPSb5c7u5d8h990B68O2imiayDIH4wEaA,44473
295
295
  sky/skylet/log_lib.py,sha256=eQT_nbdPVp6wLtFxeoYL5Vt-VFIdmV588G08iEljncc,21053
@@ -385,9 +385,9 @@ sky/utils/kubernetes/k8s_gpu_labeler_setup.yaml,sha256=VLKT2KKimZu1GDg_4AIlIt488
385
385
  sky/utils/kubernetes/kubernetes_deploy_utils.py,sha256=HPVgNt-wbCVPd9dpDFiA7t2mzQLpjXHJ61eiwRbEr-c,10378
386
386
  sky/utils/kubernetes/rsync_helper.sh,sha256=eaQOyvDq_RmcRHBqB9tH6LyDuYC310IVp97C5nqrTQg,1793
387
387
  sky/utils/kubernetes/ssh_jump_lifecycle_manager.py,sha256=Kq1MDygF2IxFmu9FXpCxqucXLmeUrvs6OtRij6XTQbo,6554
388
- skypilot_nightly-1.0.0.dev20250423.dist-info/licenses/LICENSE,sha256=emRJAvE7ngL6x0RhQvlns5wJzGI3NEQ_WMjNmd9TZc4,12170
389
- skypilot_nightly-1.0.0.dev20250423.dist-info/METADATA,sha256=_oicVHhBGcfwtKI6A3I7JgsCtqGNODcbT61KB6tAEDs,18691
390
- skypilot_nightly-1.0.0.dev20250423.dist-info/WHEEL,sha256=pxyMxgL8-pra_rKaQ4drOZAegBVuX-G_4nRHjjgWbmo,91
391
- skypilot_nightly-1.0.0.dev20250423.dist-info/entry_points.txt,sha256=StA6HYpuHj-Y61L2Ze-hK2IcLWgLZcML5gJu8cs6nU4,36
392
- skypilot_nightly-1.0.0.dev20250423.dist-info/top_level.txt,sha256=qA8QuiNNb6Y1OF-pCUtPEr6sLEwy2xJX06Bd_CrtrHY,4
393
- skypilot_nightly-1.0.0.dev20250423.dist-info/RECORD,,
388
+ skypilot_nightly-1.0.0.dev20250425.dist-info/licenses/LICENSE,sha256=emRJAvE7ngL6x0RhQvlns5wJzGI3NEQ_WMjNmd9TZc4,12170
389
+ skypilot_nightly-1.0.0.dev20250425.dist-info/METADATA,sha256=G9KA9aIoCuWd3DGn5Rg-4IeFD1U48KITV5u8pYN-f_I,18691
390
+ skypilot_nightly-1.0.0.dev20250425.dist-info/WHEEL,sha256=SmOxYU7pzNKBqASvQJ7DjX3XGUF92lrGhMb3R6_iiqI,91
391
+ skypilot_nightly-1.0.0.dev20250425.dist-info/entry_points.txt,sha256=StA6HYpuHj-Y61L2Ze-hK2IcLWgLZcML5gJu8cs6nU4,36
392
+ skypilot_nightly-1.0.0.dev20250425.dist-info/top_level.txt,sha256=qA8QuiNNb6Y1OF-pCUtPEr6sLEwy2xJX06Bd_CrtrHY,4
393
+ skypilot_nightly-1.0.0.dev20250425.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (79.0.0)
2
+ Generator: setuptools (79.0.1)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
@@ -1 +0,0 @@
1
- self.__BUILD_MANIFEST=function(s,c,e,t,a,r){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,r,a,"static/chunks/pages/clusters/[cluster]-b57ec043f09c5813.js"],"/clusters/[cluster]/[job]":[s,c,"static/chunks/pages/clusters/[cluster]/[job]-b09f7fbf6d5d74f6.js"],"/jobs":[s,e,c,t,r,"static/chunks/pages/jobs-a75029b67aab6a2e.js"],"/jobs/[job]":[s,c,"static/chunks/pages/jobs/[job]-ef2e0e91a9222cac.js"],sortedPages:["/","/_app","/_error","/clusters","/clusters/[cluster]","/clusters/[cluster]/[job]","/jobs","/jobs/[job]"]}}("static/chunks/678-206dddca808e6d16.js","static/chunks/979-7cd0778078b9cfad.js","static/chunks/312-c3c8845990db8ffc.js","static/chunks/845-2ea1cc63ba1f4067.js","static/chunks/37-72fdc8f71d6e4784.js","static/chunks/236-d437cf66e68a6f64.js"),self.__BUILD_MANIFEST_CB&&self.__BUILD_MANIFEST_CB();
@@ -1,6 +0,0 @@
1
- "use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[236],{8236:function(e,s,t){t.d(s,{L4:function(){return _},Nk:function(){return k}});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);function k(){let[e,s]=(0,r.useState)(!1),t=r.useRef(null),[a,l]=(0,r.useState)({isOpen:!1,title:"",message:"",onConfirm:null});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"}),(0,n.jsx)("span",{children:"Refresh"})]})]})]}),(0,n.jsx)(C,{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 C(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),[_,R]=(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),[Y,Q]=(0,r.useState)({isOpen:!1,title:"",message:"",onConfirm:null}),X=async()=>{Q({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)(()=>{R(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=(_-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)(L,{text:e.details,rowId:e.id,expandedRowId:D,setExpandedRowId:I}):"-"}),(0,n.jsx)(h.pj,{children:(0,n.jsx)(S,{jobParent:"/jobs",jobId:e.id,managed:!0})})]}),D===e.id&&(0,n.jsx)(E,{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:X,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)),R(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:()=>{R(e=>Math.max(e-1,1))},disabled:1===_,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:()=>{R(e=>Math.min(e+1,el))},disabled:_===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:Y.isOpen,onClose:()=>Q({...Y,isOpen:!1}),onConfirm:Y.onConfirm,title:Y.title,message:Y.message})]})}function S(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){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]),_=e=>{let s="ascending";m.key===e&&"ascending"===m.direction&&(s="descending"),j({key:e,direction:s})},R=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:()=>_("id"),children:["ID",R("id")]}),(0,n.jsxs)(h.ss,{className:"sortable whitespace-nowrap",onClick:()=>_("job"),children:["Name",R("job")]}),(0,n.jsxs)(h.ss,{className:"sortable whitespace-nowrap",onClick:()=>_("user"),children:["User",R("user")]}),(0,n.jsxs)(h.ss,{className:"sortable whitespace-nowrap",onClick:()=>_("submitted_at"),children:["Submitted",R("submitted_at")]}),(0,n.jsxs)(h.ss,{className:"sortable whitespace-nowrap",onClick:()=>_("job_duration"),children:["Duration",R("job_duration")]}),(0,n.jsxs)(h.ss,{className:"sortable whitespace-nowrap",onClick:()=>_("status"),children:["Status",R("status")]}),(0,n.jsxs)(h.ss,{className:"sortable whitespace-nowrap",onClick:()=>_("resources"),children:["Resources",R("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)(L,{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)(S,{jobParent:"/clusters/".concat(s),jobId:e.id,managed:!1})})]}),l===e.id&&(0,n.jsx)(E,{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 E(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 L(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")}}}}]);
@@ -1,6 +0,0 @@
1
- "use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[37],{9037:function(e,s,t){t.d(s,{Cc:function(){return N},GV:function(){return M}});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);function N(){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);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 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"}),(0,n.jsx)("span",{children:"Refresh"})]})]})]}),(0,n.jsx)(v,{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 v(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),[z,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/z),W=(b-1)*z,Z=W+z,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)(M,{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:z,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 y=(e,s)=>{s&&s(e)},C=(e,s)=>{s?s(e):window.open("ssh://".concat(e))},b=e=>"RUNNING"===e?["connect","VSCode"]:[],S={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 M(e){let{withLabel:s=!1,cluster:t,status:l,onOpenSSHModal:r,onOpenVSCodeModal:c}=e,i=b(l),o=e=>{switch(e){case"connect":C(t,r);break;case"VSCode":y(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(S).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:()=>o(r),className:"text-sky-blue hover:text-sky-blue-bright font-medium inline-flex items-center",children:[c,t&&(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,t&&(0,n.jsx)("span",{className:"ml-1.5",children:t})]})},r)})})})}}}]);
@@ -1 +0,0 @@
1
- "use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[845],{1266:function(e,t,a){a.d(t,{cV:function(){return w},Oh:function(){return N},_R:function(){return v}});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);function N(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 v(e){let{isOpen:t,onClose:a,cluster:r}=e;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 -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 w(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}})}}]);