skypilot-nightly 1.0.0.dev20250821__py3-none-any.whl → 1.0.0.dev20250822__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.

Potentially problematic release.


This version of skypilot-nightly might be problematic. Click here for more details.

Files changed (39) hide show
  1. sky/__init__.py +2 -2
  2. sky/client/cli/command.py +4 -1
  3. sky/client/sdk.py +64 -19
  4. sky/client/sdk_async.py +1 -1
  5. sky/core.py +3 -5
  6. sky/dashboard/out/404.html +1 -1
  7. sky/dashboard/out/clusters/[cluster]/[job].html +1 -1
  8. sky/dashboard/out/clusters/[cluster].html +1 -1
  9. sky/dashboard/out/clusters.html +1 -1
  10. sky/dashboard/out/config.html +1 -1
  11. sky/dashboard/out/index.html +1 -1
  12. sky/dashboard/out/infra/[context].html +1 -1
  13. sky/dashboard/out/infra.html +1 -1
  14. sky/dashboard/out/jobs/[job].html +1 -1
  15. sky/dashboard/out/jobs/pools/[pool].html +1 -1
  16. sky/dashboard/out/jobs.html +1 -1
  17. sky/dashboard/out/users.html +1 -1
  18. sky/dashboard/out/volumes.html +1 -1
  19. sky/dashboard/out/workspace/new.html +1 -1
  20. sky/dashboard/out/workspaces/[name].html +1 -1
  21. sky/dashboard/out/workspaces.html +1 -1
  22. sky/exceptions.py +8 -0
  23. sky/jobs/utils.py +10 -3
  24. sky/optimizer.py +14 -4
  25. sky/provision/kubernetes/instance.py +4 -1
  26. sky/server/requests/executor.py +2 -2
  27. sky/server/requests/serializers/decoders.py +5 -0
  28. sky/server/requests/serializers/encoders.py +5 -0
  29. sky/server/rest.py +38 -8
  30. sky/server/server.py +8 -6
  31. sky/users/permission.py +4 -6
  32. {skypilot_nightly-1.0.0.dev20250821.dist-info → skypilot_nightly-1.0.0.dev20250822.dist-info}/METADATA +2 -2
  33. {skypilot_nightly-1.0.0.dev20250821.dist-info → skypilot_nightly-1.0.0.dev20250822.dist-info}/RECORD +39 -39
  34. /sky/dashboard/out/_next/static/{wN25tc2rkvOkO-qkzIhcD → WD29VpW0S7wsYey0qFBHQ}/_buildManifest.js +0 -0
  35. /sky/dashboard/out/_next/static/{wN25tc2rkvOkO-qkzIhcD → WD29VpW0S7wsYey0qFBHQ}/_ssgManifest.js +0 -0
  36. {skypilot_nightly-1.0.0.dev20250821.dist-info → skypilot_nightly-1.0.0.dev20250822.dist-info}/WHEEL +0 -0
  37. {skypilot_nightly-1.0.0.dev20250821.dist-info → skypilot_nightly-1.0.0.dev20250822.dist-info}/entry_points.txt +0 -0
  38. {skypilot_nightly-1.0.0.dev20250821.dist-info → skypilot_nightly-1.0.0.dev20250822.dist-info}/licenses/LICENSE +0 -0
  39. {skypilot_nightly-1.0.0.dev20250821.dist-info → skypilot_nightly-1.0.0.dev20250822.dist-info}/top_level.txt +0 -0
sky/__init__.py CHANGED
@@ -7,7 +7,7 @@ import urllib.request
7
7
  from sky.utils import directory_utils
8
8
 
9
9
  # Replaced with the current commit when building the wheels.
10
- _SKYPILOT_COMMIT_SHA = '05eeefe2f30b1c333c96733989830045eee3fd28'
10
+ _SKYPILOT_COMMIT_SHA = '9e77988300f79b611306a71b906ca4283e45c7ef'
11
11
 
12
12
 
13
13
  def _get_git_commit():
@@ -37,7 +37,7 @@ def _get_git_commit():
37
37
 
38
38
 
39
39
  __commit__ = _get_git_commit()
40
- __version__ = '1.0.0.dev20250821'
40
+ __version__ = '1.0.0.dev20250822'
41
41
  __root_dir__ = directory_utils.get_sky_dir()
42
42
 
43
43
 
sky/client/cli/command.py CHANGED
@@ -1611,7 +1611,7 @@ def _show_endpoint(query_clusters: Optional[List[str]],
1611
1611
  if endpoint:
1612
1612
  request_id = sdk.endpoints(cluster_record['name'], endpoint)
1613
1613
  cluster_endpoints = sdk.stream_and_get(request_id)
1614
- cluster_endpoint = cluster_endpoints.get(str(endpoint), None)
1614
+ cluster_endpoint = cluster_endpoints.get(endpoint, None)
1615
1615
  if not cluster_endpoint:
1616
1616
  raise click.Abort(f'Endpoint {endpoint} not found for cluster '
1617
1617
  f'{cluster_record["name"]!r}.')
@@ -6200,6 +6200,9 @@ def api_info():
6200
6200
  user = api_server_user
6201
6201
  else:
6202
6202
  user = models.User.get_current_user()
6203
+ # Print client version and commit.
6204
+ click.echo(f'SkyPilot client version: {sky.__version__}, '
6205
+ f'commit: {sky.__commit__}')
6203
6206
  click.echo(f'Using SkyPilot API server and dashboard: {url}\n'
6204
6207
  f'{ux_utils.INDENT_SYMBOL}Status: {api_server_info.status}, '
6205
6208
  f'commit: {api_server_info.commit}, '
sky/client/sdk.py CHANGED
@@ -16,7 +16,8 @@ import logging
16
16
  import os
17
17
  import subprocess
18
18
  import typing
19
- from typing import Any, Dict, List, Optional, Tuple, TypeVar, Union
19
+ from typing import (Any, Dict, Iterator, List, Literal, Optional, Tuple,
20
+ TypeVar, Union)
20
21
  from urllib import parse as urlparse
21
22
 
22
23
  import click
@@ -794,17 +795,44 @@ def exec( # pylint: disable=redefined-builtin
794
795
  return server_common.get_request_id(response)
795
796
 
796
797
 
797
- # TODO(aylei): when retry logs request, there will be duplciated log entries.
798
+ @typing.overload
799
+ def tail_logs(
800
+ cluster_name: str,
801
+ job_id: Optional[int],
802
+ follow: bool,
803
+ tail: int = 0,
804
+ output_stream: Optional['io.TextIOBase'] = None,
805
+ *, # keyword only separator
806
+ preload_content: Literal[True] = True) -> int:
807
+ ...
808
+
809
+
810
+ @typing.overload
811
+ def tail_logs(cluster_name: str,
812
+ job_id: Optional[int],
813
+ follow: bool,
814
+ tail: int = 0,
815
+ output_stream: None = None,
816
+ *,
817
+ preload_content: Literal[False]) -> Iterator[Optional[str]]:
818
+ ...
819
+
820
+
821
+ # TODO(aylei): when retry logs request, there will be duplicated log entries.
798
822
  # We should fix this.
799
823
  @usage_lib.entrypoint
800
824
  @server_common.check_server_healthy_or_start
801
825
  @annotations.client_api
802
826
  @rest.retry_transient_errors()
803
- def tail_logs(cluster_name: str,
804
- job_id: Optional[int],
805
- follow: bool,
806
- tail: int = 0,
807
- output_stream: Optional['io.TextIOBase'] = None) -> int:
827
+ def tail_logs(
828
+ cluster_name: str,
829
+ job_id: Optional[int],
830
+ follow: bool,
831
+ tail: int = 0,
832
+ output_stream: Optional['io.TextIOBase'] = None,
833
+ *, # keyword only separator
834
+ preload_content: bool = True
835
+ ) -> Union[int, Iterator[Optional[str]]]:
808
836
  """Tails the logs of a job.
809
837
 
810
838
  Args:
@@ -814,12 +842,21 @@ def tail_logs(cluster_name: str,
814
842
  immediately.
815
843
  tail: if > 0, tail the last N lines of the logs.
816
844
  output_stream: the stream to write the logs to. If None, print to the
817
- console.
845
+ console. Cannot be used with preload_content=False.
846
+ preload_content: if False, returns an Iterator[str | None] containing
847
+ the logs without the function blocking on the retrieval of entire
848
+ log. Iterator returns None when the log has been completely
849
+ streamed. Default True. Cannot be used with output_stream.
818
850
 
819
851
  Returns:
820
- Exit code based on success or failure of the job. 0 if success,
821
- 100 if the job failed. See exceptions.JobExitCode for possible exit
822
- codes.
852
+ If preload_content is True:
853
+ Exit code based on success or failure of the job. 0 if success,
854
+ 100 if the job failed. See exceptions.JobExitCode for possible exit
855
+ codes.
856
+ If preload_content is False:
857
+ Iterator[str | None] containing the logs without the function
858
+ blocking on the retrieval of entire log. Iterator returns None
859
+ when the log has been completely streamed.
823
860
 
824
861
  Request Raises:
825
862
  ValueError: if arguments are invalid or the cluster is not supported.
@@ -832,6 +869,10 @@ def tail_logs(cluster_name: str,
832
869
  sky.exceptions.CloudUserIdentityError: if we fail to get the current
833
870
  user identity.
834
871
  """
872
+ if output_stream is not None and not preload_content:
873
+ raise ValueError(
874
+ 'output_stream cannot be specified when preload_content is False')
875
+
835
876
  body = payloads.ClusterJobBody(
836
877
  cluster_name=cluster_name,
837
878
  job_id=job_id,
@@ -847,12 +888,15 @@ def tail_logs(cluster_name: str,
847
888
  None))
848
889
  request_id: server_common.RequestId[int] = server_common.get_request_id(
849
890
  response)
850
- # Log request is idempotent when tail is 0, thus can resume previous
851
- # streaming point on retry.
852
- return stream_response(request_id=request_id,
853
- response=response,
854
- output_stream=output_stream,
855
- resumable=(tail == 0))
891
+ if preload_content:
892
+ # Log request is idempotent when tail is 0, thus can resume previous
893
+ # streaming point on retry.
894
+ return stream_response(request_id=request_id,
895
+ response=response,
896
+ output_stream=output_stream,
897
+ resumable=(tail == 0))
898
+ else:
899
+ return rich_utils.decode_rich_status(response)
856
900
 
857
901
 
858
902
  @usage_lib.entrypoint
@@ -1466,7 +1510,7 @@ def status(
1466
1510
  def endpoints(
1467
1511
  cluster: str,
1468
1512
  port: Optional[Union[int, str]] = None
1469
- ) -> server_common.RequestId[Dict[str, str]]:
1513
+ ) -> server_common.RequestId[Dict[int, str]]:
1470
1514
  """Gets the endpoint for a given cluster and port number (endpoint).
1471
1515
 
1472
1516
  Args:
@@ -1944,6 +1988,7 @@ def stream_and_get(request_id: None = None,
1944
1988
  @usage_lib.entrypoint
1945
1989
  @server_common.check_server_healthy_or_start
1946
1990
  @annotations.client_api
1991
+ @rest.retry_transient_errors()
1947
1992
  def stream_and_get(
1948
1993
  request_id: Optional[server_common.RequestId[T]] = None,
1949
1994
  log_path: Optional[str] = None,
@@ -1995,7 +2040,7 @@ def stream_and_get(
1995
2040
  if response.status_code in [404, 400]:
1996
2041
  detail = response.json().get('detail')
1997
2042
  with ux_utils.print_exception_no_traceback():
1998
- raise RuntimeError(f'Failed to stream logs: {detail}')
2043
+ raise exceptions.ClientError(f'Failed to stream logs: {detail}')
1999
2044
  elif response.status_code != 200:
2000
2045
  # TODO(syang): handle the case where the requestID is not provided
2001
2046
  # see https://github.com/skypilot-org/skypilot/issues/6549
sky/client/sdk_async.py CHANGED
@@ -588,7 +588,7 @@ async def endpoints(
588
588
  cluster: str,
589
589
  port: Optional[Union[int, str]] = None,
590
590
  stream_logs: Optional[StreamConfig] = DEFAULT_STREAM_CONFIG
591
- ) -> Dict[str, str]:
591
+ ) -> Dict[int, str]:
592
592
  """Async version of endpoints() that gets the endpoint for a given cluster
593
593
  and port number."""
594
594
  request_id = await context_utils.to_thread(sdk.endpoints, cluster, port)
sky/core.py CHANGED
@@ -259,7 +259,7 @@ all_clusters, unmanaged_clusters, all_jobs, context
259
259
 
260
260
 
261
261
  def endpoints(cluster: str,
262
- port: Optional[Union[int, str]] = None) -> Dict[str, str]:
262
+ port: Optional[Union[int, str]] = None) -> Dict[int, str]:
263
263
  """Gets the endpoint for a given cluster and port number (endpoint).
264
264
 
265
265
  Args:
@@ -267,7 +267,7 @@ def endpoints(cluster: str,
267
267
  port: The port number to get the endpoint for. If None, endpoints
268
268
  for all ports are returned..
269
269
 
270
- Returns: A dictionary of port numbers to endpoints. If endpoint is None,
270
+ Returns: A dictionary of port numbers to endpoints. If port is None,
271
271
  the dictionary will contain all ports:endpoints exposed on the cluster.
272
272
 
273
273
  Raises:
@@ -279,9 +279,7 @@ def endpoints(cluster: str,
279
279
  ux_utils.spinner_message(
280
280
  f'Fetching endpoints for cluster {cluster}')):
281
281
  result = backend_utils.get_endpoints(cluster=cluster, port=port)
282
- # Convert int keys to str keys.
283
- # In JSON serialization, each key must be a string.
284
- return {str(k): v for k, v in result.items()}
282
+ return result
285
283
 
286
284
 
287
285
  @usage_lib.entrypoint
@@ -1 +1 @@
1
- <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.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-6e76f636a048e145.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_error-c66a4e8afc46f17b.js" defer=""></script><script src="/dashboard/_next/static/wN25tc2rkvOkO-qkzIhcD/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/wN25tc2rkvOkO-qkzIhcD/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{"statusCode":404}},"page":"/_error","query":{},"buildId":"wN25tc2rkvOkO-qkzIhcD","assetPrefix":"/dashboard","nextExport":true,"isFallback":false,"gip":true,"scriptLoader":[]}</script></body></html>
1
+ <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.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-6e76f636a048e145.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_error-c66a4e8afc46f17b.js" defer=""></script><script src="/dashboard/_next/static/WD29VpW0S7wsYey0qFBHQ/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/WD29VpW0S7wsYey0qFBHQ/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{"statusCode":404}},"page":"/_error","query":{},"buildId":"WD29VpW0S7wsYey0qFBHQ","assetPrefix":"/dashboard","nextExport":true,"isFallback":false,"gip":true,"scriptLoader":[]}</script></body></html>
@@ -1 +1 @@
1
- <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.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-6e76f636a048e145.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/616-3d59f75e2ccf9321.js" defer=""></script><script src="/dashboard/_next/static/chunks/6130-2be46d70a38f1e82.js" defer=""></script><script src="/dashboard/_next/static/chunks/5739-d67458fcb1386c92.js" defer=""></script><script src="/dashboard/_next/static/chunks/7411-b15471acd2cba716.js" defer=""></script><script src="/dashboard/_next/static/chunks/6989-01359c57e018caa4.js" defer=""></script><script src="/dashboard/_next/static/chunks/3850-ff4a9a69d978632b.js" defer=""></script><script src="/dashboard/_next/static/chunks/6135-4b4d5e824b7f9d3c.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/clusters/%5Bcluster%5D/%5Bjob%5D-06afb50d25f7c61f.js" defer=""></script><script src="/dashboard/_next/static/wN25tc2rkvOkO-qkzIhcD/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/wN25tc2rkvOkO-qkzIhcD/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/clusters/[cluster]/[job]","query":{},"buildId":"wN25tc2rkvOkO-qkzIhcD","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
1
+ <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.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-6e76f636a048e145.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/616-3d59f75e2ccf9321.js" defer=""></script><script src="/dashboard/_next/static/chunks/6130-2be46d70a38f1e82.js" defer=""></script><script src="/dashboard/_next/static/chunks/5739-d67458fcb1386c92.js" defer=""></script><script src="/dashboard/_next/static/chunks/7411-b15471acd2cba716.js" defer=""></script><script src="/dashboard/_next/static/chunks/6989-01359c57e018caa4.js" defer=""></script><script src="/dashboard/_next/static/chunks/3850-ff4a9a69d978632b.js" defer=""></script><script src="/dashboard/_next/static/chunks/6135-4b4d5e824b7f9d3c.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/clusters/%5Bcluster%5D/%5Bjob%5D-06afb50d25f7c61f.js" defer=""></script><script src="/dashboard/_next/static/WD29VpW0S7wsYey0qFBHQ/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/WD29VpW0S7wsYey0qFBHQ/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/clusters/[cluster]/[job]","query":{},"buildId":"WD29VpW0S7wsYey0qFBHQ","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
@@ -1 +1 @@
1
- <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.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-6e76f636a048e145.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/616-3d59f75e2ccf9321.js" defer=""></script><script src="/dashboard/_next/static/chunks/6130-2be46d70a38f1e82.js" defer=""></script><script src="/dashboard/_next/static/chunks/5739-d67458fcb1386c92.js" defer=""></script><script src="/dashboard/_next/static/chunks/7411-b15471acd2cba716.js" defer=""></script><script src="/dashboard/_next/static/chunks/1272-1ef0bf0237faccdb.js" defer=""></script><script src="/dashboard/_next/static/chunks/4676-9da7fdbde90b5549.js" defer=""></script><script src="/dashboard/_next/static/chunks/754-d0da8ab45f9509e9.js" defer=""></script><script src="/dashboard/_next/static/chunks/6989-01359c57e018caa4.js" defer=""></script><script src="/dashboard/_next/static/chunks/3850-ff4a9a69d978632b.js" defer=""></script><script src="/dashboard/_next/static/chunks/8969-4a6f1a928fb6d370.js" defer=""></script><script src="/dashboard/_next/static/chunks/6990-08b2a1cae076a943.js" defer=""></script><script src="/dashboard/_next/static/chunks/6135-4b4d5e824b7f9d3c.js" defer=""></script><script src="/dashboard/_next/static/chunks/1121-8afcf719ea87debc.js" defer=""></script><script src="/dashboard/_next/static/chunks/6856-049014c6d43d127b.js" defer=""></script><script src="/dashboard/_next/static/chunks/6601-06114c982db410b6.js" defer=""></script><script src="/dashboard/_next/static/chunks/3015-6c9c09593b1e67b6.js" defer=""></script><script src="/dashboard/_next/static/chunks/9037-89a84fd7fa31362d.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/clusters/%5Bcluster%5D-a0527109c2fab467.js" defer=""></script><script src="/dashboard/_next/static/wN25tc2rkvOkO-qkzIhcD/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/wN25tc2rkvOkO-qkzIhcD/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/clusters/[cluster]","query":{},"buildId":"wN25tc2rkvOkO-qkzIhcD","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
1
+ <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.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-6e76f636a048e145.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/616-3d59f75e2ccf9321.js" defer=""></script><script src="/dashboard/_next/static/chunks/6130-2be46d70a38f1e82.js" defer=""></script><script src="/dashboard/_next/static/chunks/5739-d67458fcb1386c92.js" defer=""></script><script src="/dashboard/_next/static/chunks/7411-b15471acd2cba716.js" defer=""></script><script src="/dashboard/_next/static/chunks/1272-1ef0bf0237faccdb.js" defer=""></script><script src="/dashboard/_next/static/chunks/4676-9da7fdbde90b5549.js" defer=""></script><script src="/dashboard/_next/static/chunks/754-d0da8ab45f9509e9.js" defer=""></script><script src="/dashboard/_next/static/chunks/6989-01359c57e018caa4.js" defer=""></script><script src="/dashboard/_next/static/chunks/3850-ff4a9a69d978632b.js" defer=""></script><script src="/dashboard/_next/static/chunks/8969-4a6f1a928fb6d370.js" defer=""></script><script src="/dashboard/_next/static/chunks/6990-08b2a1cae076a943.js" defer=""></script><script src="/dashboard/_next/static/chunks/6135-4b4d5e824b7f9d3c.js" defer=""></script><script src="/dashboard/_next/static/chunks/1121-8afcf719ea87debc.js" defer=""></script><script src="/dashboard/_next/static/chunks/6856-049014c6d43d127b.js" defer=""></script><script src="/dashboard/_next/static/chunks/6601-06114c982db410b6.js" defer=""></script><script src="/dashboard/_next/static/chunks/3015-6c9c09593b1e67b6.js" defer=""></script><script src="/dashboard/_next/static/chunks/9037-89a84fd7fa31362d.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/clusters/%5Bcluster%5D-a0527109c2fab467.js" defer=""></script><script src="/dashboard/_next/static/WD29VpW0S7wsYey0qFBHQ/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/WD29VpW0S7wsYey0qFBHQ/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/clusters/[cluster]","query":{},"buildId":"WD29VpW0S7wsYey0qFBHQ","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
@@ -1 +1 @@
1
- <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.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-6e76f636a048e145.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/clusters-469814d711d63b1b.js" defer=""></script><script src="/dashboard/_next/static/wN25tc2rkvOkO-qkzIhcD/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/wN25tc2rkvOkO-qkzIhcD/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/clusters","query":{},"buildId":"wN25tc2rkvOkO-qkzIhcD","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
1
+ <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.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-6e76f636a048e145.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/clusters-469814d711d63b1b.js" defer=""></script><script src="/dashboard/_next/static/WD29VpW0S7wsYey0qFBHQ/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/WD29VpW0S7wsYey0qFBHQ/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/clusters","query":{},"buildId":"WD29VpW0S7wsYey0qFBHQ","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
@@ -1 +1 @@
1
- <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.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-6e76f636a048e145.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/config-dfb9bf07b13045f4.js" defer=""></script><script src="/dashboard/_next/static/wN25tc2rkvOkO-qkzIhcD/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/wN25tc2rkvOkO-qkzIhcD/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/config","query":{},"buildId":"wN25tc2rkvOkO-qkzIhcD","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
1
+ <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.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-6e76f636a048e145.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/config-dfb9bf07b13045f4.js" defer=""></script><script src="/dashboard/_next/static/WD29VpW0S7wsYey0qFBHQ/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/WD29VpW0S7wsYey0qFBHQ/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/config","query":{},"buildId":"WD29VpW0S7wsYey0qFBHQ","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
@@ -1 +1 @@
1
- <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.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-6e76f636a048e145.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/index-444f1804401f04ea.js" defer=""></script><script src="/dashboard/_next/static/wN25tc2rkvOkO-qkzIhcD/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/wN25tc2rkvOkO-qkzIhcD/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/","query":{},"buildId":"wN25tc2rkvOkO-qkzIhcD","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
1
+ <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.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-6e76f636a048e145.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/index-444f1804401f04ea.js" defer=""></script><script src="/dashboard/_next/static/WD29VpW0S7wsYey0qFBHQ/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/WD29VpW0S7wsYey0qFBHQ/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/","query":{},"buildId":"WD29VpW0S7wsYey0qFBHQ","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
@@ -1 +1 @@
1
- <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.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-6e76f636a048e145.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/infra/%5Bcontext%5D-81351f95f3bec08e.js" defer=""></script><script src="/dashboard/_next/static/wN25tc2rkvOkO-qkzIhcD/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/wN25tc2rkvOkO-qkzIhcD/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/infra/[context]","query":{},"buildId":"wN25tc2rkvOkO-qkzIhcD","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
1
+ <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.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-6e76f636a048e145.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/infra/%5Bcontext%5D-81351f95f3bec08e.js" defer=""></script><script src="/dashboard/_next/static/WD29VpW0S7wsYey0qFBHQ/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/WD29VpW0S7wsYey0qFBHQ/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/infra/[context]","query":{},"buildId":"WD29VpW0S7wsYey0qFBHQ","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
@@ -1 +1 @@
1
- <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.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-6e76f636a048e145.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/infra-c320641c2bcbbea6.js" defer=""></script><script src="/dashboard/_next/static/wN25tc2rkvOkO-qkzIhcD/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/wN25tc2rkvOkO-qkzIhcD/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/infra","query":{},"buildId":"wN25tc2rkvOkO-qkzIhcD","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
1
+ <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.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-6e76f636a048e145.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/infra-c320641c2bcbbea6.js" defer=""></script><script src="/dashboard/_next/static/WD29VpW0S7wsYey0qFBHQ/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/WD29VpW0S7wsYey0qFBHQ/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/infra","query":{},"buildId":"WD29VpW0S7wsYey0qFBHQ","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
@@ -1 +1 @@
1
- <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.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-6e76f636a048e145.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/616-3d59f75e2ccf9321.js" defer=""></script><script src="/dashboard/_next/static/chunks/6130-2be46d70a38f1e82.js" defer=""></script><script src="/dashboard/_next/static/chunks/5739-d67458fcb1386c92.js" defer=""></script><script src="/dashboard/_next/static/chunks/7411-b15471acd2cba716.js" defer=""></script><script src="/dashboard/_next/static/chunks/1272-1ef0bf0237faccdb.js" defer=""></script><script src="/dashboard/_next/static/chunks/754-d0da8ab45f9509e9.js" defer=""></script><script src="/dashboard/_next/static/chunks/6989-01359c57e018caa4.js" defer=""></script><script src="/dashboard/_next/static/chunks/3850-ff4a9a69d978632b.js" defer=""></script><script src="/dashboard/_next/static/chunks/8969-4a6f1a928fb6d370.js" defer=""></script><script src="/dashboard/_next/static/chunks/6135-4b4d5e824b7f9d3c.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/jobs/%5Bjob%5D-dd64309c3fe67ed2.js" defer=""></script><script src="/dashboard/_next/static/wN25tc2rkvOkO-qkzIhcD/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/wN25tc2rkvOkO-qkzIhcD/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/jobs/[job]","query":{},"buildId":"wN25tc2rkvOkO-qkzIhcD","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
1
+ <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.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-6e76f636a048e145.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/616-3d59f75e2ccf9321.js" defer=""></script><script src="/dashboard/_next/static/chunks/6130-2be46d70a38f1e82.js" defer=""></script><script src="/dashboard/_next/static/chunks/5739-d67458fcb1386c92.js" defer=""></script><script src="/dashboard/_next/static/chunks/7411-b15471acd2cba716.js" defer=""></script><script src="/dashboard/_next/static/chunks/1272-1ef0bf0237faccdb.js" defer=""></script><script src="/dashboard/_next/static/chunks/754-d0da8ab45f9509e9.js" defer=""></script><script src="/dashboard/_next/static/chunks/6989-01359c57e018caa4.js" defer=""></script><script src="/dashboard/_next/static/chunks/3850-ff4a9a69d978632b.js" defer=""></script><script src="/dashboard/_next/static/chunks/8969-4a6f1a928fb6d370.js" defer=""></script><script src="/dashboard/_next/static/chunks/6135-4b4d5e824b7f9d3c.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/jobs/%5Bjob%5D-dd64309c3fe67ed2.js" defer=""></script><script src="/dashboard/_next/static/WD29VpW0S7wsYey0qFBHQ/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/WD29VpW0S7wsYey0qFBHQ/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/jobs/[job]","query":{},"buildId":"WD29VpW0S7wsYey0qFBHQ","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
@@ -1 +1 @@
1
- <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.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-6e76f636a048e145.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/616-3d59f75e2ccf9321.js" defer=""></script><script src="/dashboard/_next/static/chunks/6130-2be46d70a38f1e82.js" defer=""></script><script src="/dashboard/_next/static/chunks/5739-d67458fcb1386c92.js" defer=""></script><script src="/dashboard/_next/static/chunks/1272-1ef0bf0237faccdb.js" defer=""></script><script src="/dashboard/_next/static/chunks/754-d0da8ab45f9509e9.js" defer=""></script><script src="/dashboard/_next/static/chunks/6989-01359c57e018caa4.js" defer=""></script><script src="/dashboard/_next/static/chunks/3850-ff4a9a69d978632b.js" defer=""></script><script src="/dashboard/_next/static/chunks/8969-4a6f1a928fb6d370.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/jobs/pools/%5Bpool%5D-07349868f7905d37.js" defer=""></script><script src="/dashboard/_next/static/wN25tc2rkvOkO-qkzIhcD/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/wN25tc2rkvOkO-qkzIhcD/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/jobs/pools/[pool]","query":{},"buildId":"wN25tc2rkvOkO-qkzIhcD","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
1
+ <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.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-6e76f636a048e145.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/616-3d59f75e2ccf9321.js" defer=""></script><script src="/dashboard/_next/static/chunks/6130-2be46d70a38f1e82.js" defer=""></script><script src="/dashboard/_next/static/chunks/5739-d67458fcb1386c92.js" defer=""></script><script src="/dashboard/_next/static/chunks/1272-1ef0bf0237faccdb.js" defer=""></script><script src="/dashboard/_next/static/chunks/754-d0da8ab45f9509e9.js" defer=""></script><script src="/dashboard/_next/static/chunks/6989-01359c57e018caa4.js" defer=""></script><script src="/dashboard/_next/static/chunks/3850-ff4a9a69d978632b.js" defer=""></script><script src="/dashboard/_next/static/chunks/8969-4a6f1a928fb6d370.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/jobs/pools/%5Bpool%5D-07349868f7905d37.js" defer=""></script><script src="/dashboard/_next/static/WD29VpW0S7wsYey0qFBHQ/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/WD29VpW0S7wsYey0qFBHQ/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/jobs/pools/[pool]","query":{},"buildId":"WD29VpW0S7wsYey0qFBHQ","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
@@ -1 +1 @@
1
- <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.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-6e76f636a048e145.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/jobs-7421e63ac35f8fce.js" defer=""></script><script src="/dashboard/_next/static/wN25tc2rkvOkO-qkzIhcD/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/wN25tc2rkvOkO-qkzIhcD/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/jobs","query":{},"buildId":"wN25tc2rkvOkO-qkzIhcD","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
1
+ <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.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-6e76f636a048e145.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/jobs-7421e63ac35f8fce.js" defer=""></script><script src="/dashboard/_next/static/WD29VpW0S7wsYey0qFBHQ/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/WD29VpW0S7wsYey0qFBHQ/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/jobs","query":{},"buildId":"WD29VpW0S7wsYey0qFBHQ","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
@@ -1 +1 @@
1
- <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.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-6e76f636a048e145.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/users-018bf31cda52e11b.js" defer=""></script><script src="/dashboard/_next/static/wN25tc2rkvOkO-qkzIhcD/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/wN25tc2rkvOkO-qkzIhcD/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/users","query":{},"buildId":"wN25tc2rkvOkO-qkzIhcD","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
1
+ <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.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-6e76f636a048e145.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/users-018bf31cda52e11b.js" defer=""></script><script src="/dashboard/_next/static/WD29VpW0S7wsYey0qFBHQ/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/WD29VpW0S7wsYey0qFBHQ/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/users","query":{},"buildId":"WD29VpW0S7wsYey0qFBHQ","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
@@ -1 +1 @@
1
- <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.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-6e76f636a048e145.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/volumes-739726d6b823f532.js" defer=""></script><script src="/dashboard/_next/static/wN25tc2rkvOkO-qkzIhcD/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/wN25tc2rkvOkO-qkzIhcD/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/volumes","query":{},"buildId":"wN25tc2rkvOkO-qkzIhcD","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
1
+ <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.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-6e76f636a048e145.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/volumes-739726d6b823f532.js" defer=""></script><script src="/dashboard/_next/static/WD29VpW0S7wsYey0qFBHQ/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/WD29VpW0S7wsYey0qFBHQ/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/volumes","query":{},"buildId":"WD29VpW0S7wsYey0qFBHQ","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
@@ -1 +1 @@
1
- <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.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-6e76f636a048e145.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/workspace/new-3f88a1c7e86a3f86.js" defer=""></script><script src="/dashboard/_next/static/wN25tc2rkvOkO-qkzIhcD/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/wN25tc2rkvOkO-qkzIhcD/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/workspace/new","query":{},"buildId":"wN25tc2rkvOkO-qkzIhcD","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
1
+ <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.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-6e76f636a048e145.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/workspace/new-3f88a1c7e86a3f86.js" defer=""></script><script src="/dashboard/_next/static/WD29VpW0S7wsYey0qFBHQ/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/WD29VpW0S7wsYey0qFBHQ/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/workspace/new","query":{},"buildId":"WD29VpW0S7wsYey0qFBHQ","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
@@ -1 +1 @@
1
- <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.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-6e76f636a048e145.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/616-3d59f75e2ccf9321.js" defer=""></script><script src="/dashboard/_next/static/chunks/6130-2be46d70a38f1e82.js" defer=""></script><script src="/dashboard/_next/static/chunks/5739-d67458fcb1386c92.js" defer=""></script><script src="/dashboard/_next/static/chunks/7411-b15471acd2cba716.js" defer=""></script><script src="/dashboard/_next/static/chunks/1272-1ef0bf0237faccdb.js" defer=""></script><script src="/dashboard/_next/static/chunks/7205-88191679e7988c57.js" defer=""></script><script src="/dashboard/_next/static/chunks/6989-01359c57e018caa4.js" defer=""></script><script src="/dashboard/_next/static/chunks/3850-ff4a9a69d978632b.js" defer=""></script><script src="/dashboard/_next/static/chunks/8969-4a6f1a928fb6d370.js" defer=""></script><script src="/dashboard/_next/static/chunks/6990-08b2a1cae076a943.js" defer=""></script><script src="/dashboard/_next/static/chunks/6135-4b4d5e824b7f9d3c.js" defer=""></script><script src="/dashboard/_next/static/chunks/1121-8afcf719ea87debc.js" defer=""></script><script src="/dashboard/_next/static/chunks/6601-06114c982db410b6.js" defer=""></script><script src="/dashboard/_next/static/chunks/3015-6c9c09593b1e67b6.js" defer=""></script><script src="/dashboard/_next/static/chunks/1141-943efc7aff0f0c06.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/workspaces/%5Bname%5D-de06e613e20bc977.js" defer=""></script><script src="/dashboard/_next/static/wN25tc2rkvOkO-qkzIhcD/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/wN25tc2rkvOkO-qkzIhcD/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/workspaces/[name]","query":{},"buildId":"wN25tc2rkvOkO-qkzIhcD","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
1
+ <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.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-6e76f636a048e145.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/616-3d59f75e2ccf9321.js" defer=""></script><script src="/dashboard/_next/static/chunks/6130-2be46d70a38f1e82.js" defer=""></script><script src="/dashboard/_next/static/chunks/5739-d67458fcb1386c92.js" defer=""></script><script src="/dashboard/_next/static/chunks/7411-b15471acd2cba716.js" defer=""></script><script src="/dashboard/_next/static/chunks/1272-1ef0bf0237faccdb.js" defer=""></script><script src="/dashboard/_next/static/chunks/7205-88191679e7988c57.js" defer=""></script><script src="/dashboard/_next/static/chunks/6989-01359c57e018caa4.js" defer=""></script><script src="/dashboard/_next/static/chunks/3850-ff4a9a69d978632b.js" defer=""></script><script src="/dashboard/_next/static/chunks/8969-4a6f1a928fb6d370.js" defer=""></script><script src="/dashboard/_next/static/chunks/6990-08b2a1cae076a943.js" defer=""></script><script src="/dashboard/_next/static/chunks/6135-4b4d5e824b7f9d3c.js" defer=""></script><script src="/dashboard/_next/static/chunks/1121-8afcf719ea87debc.js" defer=""></script><script src="/dashboard/_next/static/chunks/6601-06114c982db410b6.js" defer=""></script><script src="/dashboard/_next/static/chunks/3015-6c9c09593b1e67b6.js" defer=""></script><script src="/dashboard/_next/static/chunks/1141-943efc7aff0f0c06.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/workspaces/%5Bname%5D-de06e613e20bc977.js" defer=""></script><script src="/dashboard/_next/static/WD29VpW0S7wsYey0qFBHQ/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/WD29VpW0S7wsYey0qFBHQ/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/workspaces/[name]","query":{},"buildId":"WD29VpW0S7wsYey0qFBHQ","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
@@ -1 +1 @@
1
- <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.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-6e76f636a048e145.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/workspaces-be35b22e2046564c.js" defer=""></script><script src="/dashboard/_next/static/wN25tc2rkvOkO-qkzIhcD/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/wN25tc2rkvOkO-qkzIhcD/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/workspaces","query":{},"buildId":"wN25tc2rkvOkO-qkzIhcD","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
1
+ <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.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-6e76f636a048e145.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/workspaces-be35b22e2046564c.js" defer=""></script><script src="/dashboard/_next/static/WD29VpW0S7wsYey0qFBHQ/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/WD29VpW0S7wsYey0qFBHQ/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/workspaces","query":{},"buildId":"WD29VpW0S7wsYey0qFBHQ","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
sky/exceptions.py CHANGED
@@ -661,3 +661,11 @@ class RequestInterruptedError(Exception):
661
661
  class SkyletInternalError(Exception):
662
662
  """Raised when a Skylet internal error occurs."""
663
663
  pass
664
+
665
+
666
+ class ClientError(Exception):
667
+ """Raised when a there is a client error occurs.
668
+
669
+ If a request encounters a ClientError, it will not be retried to the server.
670
+ """
671
+ pass
sky/jobs/utils.py CHANGED
@@ -1494,7 +1494,7 @@ def format_job_table(
1494
1494
  'JOB DURATION',
1495
1495
  '#RECOVERIES',
1496
1496
  'STATUS',
1497
- 'WORKER_POOL',
1497
+ 'POOL',
1498
1498
  ]
1499
1499
  if show_all:
1500
1500
  # TODO: move SCHED. STATE to a separate flag (e.g. --debug)
@@ -1597,6 +1597,10 @@ def format_job_table(
1597
1597
 
1598
1598
  user_values = get_user_column_values(job_tasks[0])
1599
1599
 
1600
+ pool = job_tasks[0].get('pool')
1601
+ if pool is None:
1602
+ pool = '-'
1603
+
1600
1604
  job_id = job_hash[1] if tasks_have_k8s_user else job_hash
1601
1605
  job_values = [
1602
1606
  job_id,
@@ -1610,7 +1614,7 @@ def format_job_table(
1610
1614
  job_duration,
1611
1615
  recovery_cnt,
1612
1616
  status_str,
1613
- job_tasks[0].get('pool', '-'),
1617
+ pool,
1614
1618
  ]
1615
1619
  if show_all:
1616
1620
  details = job_tasks[current_task_id].get('details')
@@ -1637,6 +1641,9 @@ def format_job_table(
1637
1641
  submitted = log_utils.readable_time_duration(task['submitted_at'])
1638
1642
  user_values = get_user_column_values(task)
1639
1643
  task_workspace = '-' if len(job_tasks) > 1 else workspace
1644
+ pool = task.get('pool')
1645
+ if pool is None:
1646
+ pool = '-'
1640
1647
  values = [
1641
1648
  task['job_id'] if len(job_tasks) == 1 else ' \u21B3',
1642
1649
  task['task_id'] if len(job_tasks) > 1 else '-',
@@ -1653,7 +1660,7 @@ def format_job_table(
1653
1660
  job_duration,
1654
1661
  task['recovery_count'],
1655
1662
  task['status'].colored_str(),
1656
- task.get('pool', '-'),
1663
+ pool,
1657
1664
  ]
1658
1665
  if show_all:
1659
1666
  # schedule_state is only set at the job level, so if we have
sky/optimizer.py CHANGED
@@ -1262,12 +1262,13 @@ def _check_specified_clouds(dag: 'dag_lib.Dag') -> None:
1262
1262
 
1263
1263
 
1264
1264
  def _check_specified_regions(task: task_lib.Task) -> None:
1265
- """Check if specified regions (Kubernetes contexts) are enabled.
1265
+ """Check if specified regions (Kubernetes/SSH contexts) are enabled.
1266
1266
 
1267
1267
  Args:
1268
1268
  task: The task to check.
1269
1269
  """
1270
- # Only check for Kubernetes now
1270
+ # Only check for Kubernetes/SSH for now
1271
+ # Below check works because SSH inherits Kubernetes cloud.
1271
1272
  if not all(
1272
1273
  isinstance(resources.cloud, clouds.Kubernetes)
1273
1274
  for resources in task.resources):
@@ -1276,12 +1277,21 @@ def _check_specified_regions(task: task_lib.Task) -> None:
1276
1277
  for resources in task.resources:
1277
1278
  if resources.region is None:
1278
1279
  continue
1279
- existing_contexts = clouds.Kubernetes.existing_allowed_contexts()
1280
+
1281
+ is_ssh = isinstance(resources.cloud, clouds.SSH)
1282
+ if is_ssh:
1283
+ existing_contexts = clouds.SSH.existing_allowed_contexts()
1284
+ else:
1285
+ existing_contexts = clouds.Kubernetes.existing_allowed_contexts()
1286
+
1280
1287
  region = resources.region
1281
1288
  task_name = f' {task.name!r}' if task.name is not None else ''
1282
1289
  msg = f'Task{task_name} requires '
1283
1290
  if region not in existing_contexts:
1284
- infra_str = f'Kubernetes/{region}'
1291
+ if is_ssh:
1292
+ infra_str = f'SSH/{region.lstrip("ssh-")}'
1293
+ else:
1294
+ infra_str = f'Kubernetes/{region}'
1285
1295
  logger.warning(f'{infra_str} is not enabled.')
1286
1296
  volume_mounts_str = ''
1287
1297
  if task.volume_mounts:
@@ -797,15 +797,18 @@ def _create_pods(region: str, cluster_name_on_cloud: str,
797
797
  'For more details, refer to https://docs.skypilot.co/en/latest/reference/config.html') # pylint: disable=line-too-long
798
798
 
799
799
  needs_gpus = False
800
+ needs_gpus_nvidia = False
800
801
  limits = pod_spec['spec']['containers'][0].get('resources',
801
802
  {}).get('limits')
802
803
  if limits is not None:
803
804
  needs_gpus = limits.get(kubernetes_utils.get_gpu_resource_key(context),
804
805
  0) > 0
806
+ needs_gpus_nvidia = limits.get(
807
+ kubernetes_utils.SUPPORTED_GPU_RESOURCE_KEYS['nvidia'], 0) > 0
805
808
 
806
809
  # TPU pods provisioned on GKE use the default containerd runtime.
807
810
  # Reference: https://cloud.google.com/kubernetes-engine/docs/how-to/migrate-containerd#overview # pylint: disable=line-too-long
808
- if nvidia_runtime_exists and needs_gpus:
811
+ if nvidia_runtime_exists and needs_gpus_nvidia:
809
812
  pod_spec['spec']['runtimeClassName'] = 'nvidia'
810
813
 
811
814
  logger.debug(f'run_instances: calling create_namespaced_pod '
@@ -427,9 +427,9 @@ async def execute_request_coroutine(request: api_requests.Request):
427
427
  event loop. This is designed for executing tasks that are not CPU
428
428
  intensive, e.g. sky logs.
429
429
  """
430
+ context.initialize()
430
431
  ctx = context.get()
431
- if ctx is None:
432
- raise ValueError('Context is not initialized')
432
+ assert ctx is not None, 'Context is not initialized'
433
433
  logger.info(f'Executing request {request.request_id} in coroutine')
434
434
  func = request.entrypoint
435
435
  request_body = request.request_body
@@ -203,3 +203,8 @@ def decode_job_status(
203
203
  def decode_kubernetes_node_info(
204
204
  return_value: Dict[str, Any]) -> models.KubernetesNodesInfo:
205
205
  return models.KubernetesNodesInfo.from_dict(return_value)
206
+
207
+
208
+ @register_decoders('endpoints')
209
+ def decode_endpoints(return_value: Dict[int, str]) -> Dict[int, str]:
210
+ return {int(k): v for k, v in return_value.items()}
@@ -209,3 +209,8 @@ def encode_job_status(return_value: Dict[int, Any]) -> Dict[int, str]:
209
209
  def encode_kubernetes_node_info(
210
210
  return_value: 'models.KubernetesNodesInfo') -> Dict[str, Any]:
211
211
  return return_value.to_dict()
212
+
213
+
214
+ @register_encoder('endpoints')
215
+ def encode_endpoints(return_value: Dict[int, str]) -> Dict[str, str]:
216
+ return {str(k): v for k, v in return_value.items()}
sky/server/rest.py CHANGED
@@ -47,9 +47,10 @@ class RetryContext:
47
47
 
48
48
  @contextlib.contextmanager
49
49
  def _retry_in_context():
50
- token = _RETRY_CONTEXT.set(RetryContext())
50
+ context = RetryContext()
51
+ token = _RETRY_CONTEXT.set(context)
51
52
  try:
52
- yield
53
+ yield context
53
54
  finally:
54
55
  _RETRY_CONTEXT.reset(token)
55
56
 
@@ -76,6 +77,8 @@ def retry_transient_errors(max_retries: int = 3,
76
77
  if isinstance(e, requests.exceptions.HTTPError):
77
78
  # Only server error is considered as transient.
78
79
  return e.response.status_code >= 500
80
+ if isinstance(e, exceptions.ClientError):
81
+ return False
79
82
  # It is hard to enumerate all other errors that are transient, e.g.
80
83
  # broken pipe, connection refused, etc. Instead, it is safer to assume
81
84
  # all other errors might be transient since we only retry for 3 times
@@ -88,26 +91,53 @@ def retry_transient_errors(max_retries: int = 3,
88
91
  @functools.wraps(func)
89
92
  def wrapper(*args, **kwargs):
90
93
  backoff = common_utils.Backoff(initial_backoff, max_backoff_factor)
91
- with _retry_in_context():
92
- for retry_cnt in range(max_retries):
94
+ consecutive_failed_count = 0
95
+
96
+ with _retry_in_context() as context:
97
+ previous_line_processed = context.line_processed # should be 0
98
+
99
+ def _handle_exception():
100
+ # If the function made progress on a retry,
101
+ # clears the backoff and resets the failed retry count.
102
+ # Otherwise, increments the failed retry count.
103
+ nonlocal backoff
104
+ nonlocal consecutive_failed_count
105
+ nonlocal previous_line_processed
106
+ if context.line_processed > previous_line_processed:
107
+ backoff = common_utils.Backoff(initial_backoff,
108
+ max_backoff_factor)
109
+ previous_line_processed = context.line_processed
110
+ consecutive_failed_count = 0
111
+ else:
112
+ consecutive_failed_count += 1
113
+
114
+ while consecutive_failed_count < max_retries:
93
115
  try:
94
116
  return func(*args, **kwargs)
95
117
  # Occurs when the server proactively interrupts the request
96
118
  # during rolling update, we can retry immediately on the
97
119
  # new replica.
98
120
  except exceptions.RequestInterruptedError:
121
+ _handle_exception()
99
122
  logger.debug('Request interrupted. Retry immediately.')
100
123
  continue
101
124
  except Exception as e: # pylint: disable=broad-except
102
- if retry_cnt >= max_retries - 1:
125
+ _handle_exception()
126
+ if consecutive_failed_count >= max_retries:
103
127
  # Retries exhausted.
104
128
  raise
105
129
  if not is_transient_error(e):
106
130
  # Permanent error, no need to retry.
107
131
  raise
108
- logger.debug(f'Retry {func.__name__} due to {e}, '
109
- f'attempt {retry_cnt + 1}/{max_retries}')
110
- time.sleep(backoff.current_backoff())
132
+ logger.debug(
133
+ f'Retry {func.__name__} due to {e}, '
134
+ f'attempt {consecutive_failed_count}/{max_retries}')
135
+ # Only sleep if this is not the first retry.
136
+ # The idea is that if the function made progress on a
137
+ # retry, we should try again immediately to reduce the
138
+ # waiting time.
139
+ if consecutive_failed_count > 0:
140
+ time.sleep(backoff.current_backoff())
111
141
 
112
142
  return cast(F, wrapper)
113
143
 
sky/server/server.py CHANGED
@@ -1185,10 +1185,6 @@ async def logs(
1185
1185
  # TODO(zhwu): This should wait for the request on the cluster, e.g., async
1186
1186
  # launch, to finish, so that a user does not need to manually pull the
1187
1187
  # request status.
1188
- # Only initialize the context in logs handler to limit the scope of this
1189
- # experimental change.
1190
- # TODO(aylei): init in lifespan() to enable SkyPilot context in all APIs.
1191
- context.initialize()
1192
1188
  request_task = executor.prepare_request(
1193
1189
  request_id=request.state.request_id,
1194
1190
  request_name='logs',
@@ -1198,8 +1194,14 @@ async def logs(
1198
1194
  )
1199
1195
  task = asyncio.create_task(executor.execute_request_coroutine(request_task))
1200
1196
 
1201
- def cancel_task():
1202
- task.cancel()
1197
+ async def cancel_task():
1198
+ try:
1199
+ logger.info('Client disconnected for request: '
1200
+ f'{request.state.request_id}')
1201
+ task.cancel()
1202
+ await task
1203
+ except asyncio.CancelledError:
1204
+ pass
1203
1205
 
1204
1206
  # Cancel the task after the request is done or client disconnects
1205
1207
  background_tasks.add_task(cancel_task)
sky/users/permission.py CHANGED
@@ -68,7 +68,7 @@ class PermissionService:
68
68
  username.encode()).hexdigest()[:common_utils.USER_HASH_LENGTH]
69
69
  user_info = global_user_state.get_user(user_hash)
70
70
  if user_info:
71
- logger.info(f'Basic auth user {username} already exists')
71
+ logger.debug(f'Basic auth user {username} already exists')
72
72
  return
73
73
  global_user_state.add_or_update_user(
74
74
  models.User(id=user_hash, name=username, password=password))
@@ -169,8 +169,6 @@ class PermissionService:
169
169
  """
170
170
  user_roles = self.enforcer.get_roles_for_user(user_id)
171
171
  if not user_roles:
172
- logger.info(f'User {user_id} has no roles, adding'
173
- f' default role {rbac.get_default_role()}')
174
172
  self.enforcer.add_grouping_policy(user_id, rbac.get_default_role())
175
173
  return True
176
174
  return False
@@ -184,7 +182,7 @@ class PermissionService:
184
182
  # Avoid calling get_user_roles, as it will require the lock.
185
183
  current_roles = self.enforcer.get_roles_for_user(user_id)
186
184
  if not current_roles:
187
- logger.warning(f'User {user_id} has no roles')
185
+ logger.debug(f'User {user_id} has no roles')
188
186
  return
189
187
  self.enforcer.remove_grouping_policy(user_id, current_roles[0])
190
188
  self.enforcer.save_policy()
@@ -198,12 +196,12 @@ class PermissionService:
198
196
  # Avoid calling get_user_roles, as it will require the lock.
199
197
  current_roles = self.enforcer.get_roles_for_user(user_id)
200
198
  if not current_roles:
201
- logger.warning(f'User {user_id} has no roles')
199
+ logger.debug(f'User {user_id} has no roles')
202
200
  else:
203
201
  # TODO(hailong): how to handle multiple roles?
204
202
  current_role = current_roles[0]
205
203
  if current_role == new_role:
206
- logger.info(f'User {user_id} already has role {new_role}')
204
+ logger.debug(f'User {user_id} already has role {new_role}')
207
205
  return
208
206
  self.enforcer.remove_grouping_policy(user_id, current_role)
209
207
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: skypilot-nightly
3
- Version: 1.0.0.dev20250821
3
+ Version: 1.0.0.dev20250822
4
4
  Summary: SkyPilot: Run AI on Any Infra — Unified, Faster, Cheaper.
5
5
  Author: SkyPilot Team
6
6
  License: Apache 2.0
@@ -253,7 +253,7 @@ Dynamic: summary
253
253
 
254
254
  ----
255
255
 
256
- SkyPilot is a system for running, managing, and scaling AI workloads on any AI infrastructure.
256
+ SkyPilot is a system to run, manage, and scale AI workloads on any AI infrastructure.
257
257
 
258
258
  SkyPilot gives **AI teams** a simple interface to run jobs on any infra.
259
259
  **Infra teams** get a unified control plane to manage any AI compute — with advanced scheduling, scaling, and orchestration.
@@ -1,16 +1,16 @@
1
- sky/__init__.py,sha256=ueD01v52YcUcIk7KZm0GYiBUHc5LGsIpzn7y4et7CMU,6615
1
+ sky/__init__.py,sha256=1x7nH8a5SOeRcEFN5gIQM1Phs8ge1zKnVksdG_buKYM,6615
2
2
  sky/admin_policy.py,sha256=BeSowGnWfDj58ALiNf3cc2N4gMQWzjO6aXnX7vaqYhk,9782
3
3
  sky/authentication.py,sha256=V7zGSV7bqcAKC_EGOOS0KhJ01ZFLnme0WnjLFO7zavs,25603
4
4
  sky/check.py,sha256=Z7D6txaOAEL7fyEQ8q-Zxk1aWaHpEcl412Rj2mThbQ0,31025
5
5
  sky/cli.py,sha256=VXIZryeTtJPYpPTBKymVPmuOCyh8knfWrq-qnkr6R-4,178
6
6
  sky/cloud_stores.py,sha256=Ln5GBpel-sEs7rVx7bBrMkfLwA_bctI05Rox2uoz7Lo,26388
7
- sky/core.py,sha256=TmgehnTSJhQYPvGfQfS10FWGl-jsCFioRgg7Uso6b68,57597
7
+ sky/core.py,sha256=w6v_T5BNynOgUCc8_85U61wRlxLuF91n0fe0aC6ZqPc,57461
8
8
  sky/dag.py,sha256=0ZpAEDXuIFo1SP7YJpF9vXiFxpRwqP8od-UXMg95td8,3929
9
- sky/exceptions.py,sha256=j9bYAH9VmvifRdQzd0_T9RmPWePL2wsTPyC6gcvYh4Q,19814
9
+ sky/exceptions.py,sha256=Ya-JUKByxUGmG03vX0A4laF7VWGUyj9pNxwkn603GUI,19998
10
10
  sky/execution.py,sha256=v1JNAjjQC1iOXjG8eba-zrMDVGrjZjx7Ys4f4ExwQp0,34674
11
11
  sky/global_user_state.py,sha256=-s-bJUxpEsUcdCT_U8r7mcb965Z44iUyNRNY27TpZs4,81455
12
12
  sky/models.py,sha256=C5vuymhZtQHxtzE7sM63VV-dKJ8Zo7U7cQWCZKb9q10,3196
13
- sky/optimizer.py,sha256=rcH6CVix1PJWWSwe1XWItfsmG8igwbKtRE5QVWRlpR4,63804
13
+ sky/optimizer.py,sha256=iR57bL_8BeG6bh1sH3J6n6i65EBFjmyftezYM4nnDZA,64150
14
14
  sky/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
15
15
  sky/resources.py,sha256=TY-JVOOBexmLEbUj_8tYU8O_F9jKDpFkexcGUjl0XJk,107313
16
16
  sky/sky_logging.py,sha256=aFcwYKKlZG28q-bEsVzvmBEZ1WqHMMp1SwRGONLopDI,8512
@@ -78,11 +78,11 @@ sky/catalog/data_fetchers/fetch_vsphere.py,sha256=Yf7tKzwJsQ_4f64IT1EAP108C1D3Rg
78
78
  sky/client/__init__.py,sha256=pz6xvVSd9X-gwqbsDL0E9QOojYqM0KAD0j-NCyCIF1k,38
79
79
  sky/client/common.py,sha256=_sX88X8weo81sA2SFTaLuapSy4qzBz3KEtsf4kLTa80,15627
80
80
  sky/client/oauth.py,sha256=sNJ_DMsSTcxluj5FeNQ2IafZJLImRFmCAZ79bXeABn4,2871
81
- sky/client/sdk.py,sha256=vjf9JgBGJqxdUTxiNhoS5c15iRS09xpxhAlO9RwYqBU,102103
82
- sky/client/sdk_async.py,sha256=ZIcKzER6SAoVmK9Q2hQqKrmLEYWLLIzQnNgTBQlko5s,30425
81
+ sky/client/sdk.py,sha256=o4EWlaYHxKRcF40SUk7JPgtH0GdGp7xqHRwXy5evMb8,103740
82
+ sky/client/sdk_async.py,sha256=afuo3niHbLnSlvphiTWYtoKKkpzdOzzgWIkuwppAEao,30425
83
83
  sky/client/service_account_auth.py,sha256=5jXk0G6ufuW-SHCO7BEHQeTO0_2a8KfFmA63auXFRj4,1529
84
84
  sky/client/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
85
- sky/client/cli/command.py,sha256=NOt6rOOkcvgjfa1XlAAMlzOjqslBN3r40vOz4OZNSlk,246736
85
+ sky/client/cli/command.py,sha256=n9Ri4IGzoPiQ6mFB_z7_-QHMjAWaNF6b3oNrJQPCaxw,246877
86
86
  sky/client/cli/deprecation_utils.py,sha256=H_d5UyF2CekEoThduAzt5cihBO8hwKYMu0-Wqfbjv5E,3370
87
87
  sky/client/cli/flags.py,sha256=lLXHooU4HEslbHJuGAiCrKYkJZx99hAKaJbstw7s1bc,12136
88
88
  sky/client/cli/git.py,sha256=dqSaJI1Ndv6RfKJa6HT6ednXr0j_pVlwSdh3XiQzB60,22018
@@ -112,17 +112,19 @@ sky/clouds/utils/azure_utils.py,sha256=NToRBnhEyuUvb-nBnsKTxjhOBRkMcrelL8LK4w6s4
112
112
  sky/clouds/utils/gcp_utils.py,sha256=09MF4Vx0EW7S-GXGpyxpl2aQlHrqeu9ioV0nyionAyk,9890
113
113
  sky/clouds/utils/oci_utils.py,sha256=TFqAqRLggg4Z0bhxrrq8nouSSomZy-ub1frHXEkud2M,7302
114
114
  sky/clouds/utils/scp_utils.py,sha256=VGuccVO5uFGr8-yolWSoYrgr11z6cIeDBGcqkBzAyOs,18409
115
- sky/dashboard/out/404.html,sha256=-hELfCLLcuSFx7o__q0YfAIoRF5PecsV19savabHJNY,1423
116
- sky/dashboard/out/clusters.html,sha256=s396ja86G1uR0-qcM0P5gzW37DRJwL5KzRXoUKoJRKM,1418
117
- sky/dashboard/out/config.html,sha256=nJPMD_1qievBhgcndW11q6ZswoXYpNZ_mfabNuVEwCI,1414
115
+ sky/dashboard/out/404.html,sha256=PUVHsiWT9iE3QDPMXCL_NukS8KX6gHRmC7V7NYdsT2w,1423
116
+ sky/dashboard/out/clusters.html,sha256=eyhK1bhTy1dr9364IXUUZ7vqNoZwFL0QYe26pgoR5T4,1418
117
+ sky/dashboard/out/config.html,sha256=pmLDzUxoF3BXfXo5AZoeXYKXXIHwdQkvyzOFeDcROMA,1414
118
118
  sky/dashboard/out/favicon.ico,sha256=XilUZZglAl_1zRsg85QsbQgmQAzGPQjcUIJ-A3AzYn8,93590
119
- sky/dashboard/out/index.html,sha256=sMJ3lK1KD8BMoeYfo_RcCDmngD4kUCCewyUkOmlIBVA,1407
120
- sky/dashboard/out/infra.html,sha256=X6Zty-z8IZ8uIeQwLqITvVsxEvhC_Koy6zihjPMM3Bg,1412
121
- sky/dashboard/out/jobs.html,sha256=IKDcyn2DYJeTlHvNZrNKQXOvpGnuJ1sf-ZVlV5ScCsA,1410
119
+ sky/dashboard/out/index.html,sha256=1lbeRaD35nnAF2-BAYf4uHTsXr6q34CaGQl946opoAU,1407
120
+ sky/dashboard/out/infra.html,sha256=Qs_4AOGe0yRT5SNbSs4U8hfPczsmNWwQD0cW1kYQL-Q,1412
121
+ sky/dashboard/out/jobs.html,sha256=oB4GGaN5TCe0hpN5uAYAPsiK3N6SNIRdzQ97KV8kbSU,1410
122
122
  sky/dashboard/out/skypilot.svg,sha256=c0iRtlfLlaUm2p0rG9NFmo5FN0Qhf3pq5Xph-AeMPJw,5064
123
- sky/dashboard/out/users.html,sha256=ZnRLmiPjCtlxKshkN4HFQ3REGd4tn2uIxjdmMr6nkdo,1412
124
- sky/dashboard/out/volumes.html,sha256=r3ed1FyZ9xxzrTPRuYa9Y6ujVpaPIEp7ta4OXeQRc7k,1416
125
- sky/dashboard/out/workspaces.html,sha256=8DSLzMZi9sE6559JFxuS7KQ0db8XQXkcHmnHOHMg4Ds,1422
123
+ sky/dashboard/out/users.html,sha256=q--RvSYGtkG4mbz9Tr6bxMZHp0yaXXoIxHX8LJNylgk,1412
124
+ sky/dashboard/out/volumes.html,sha256=egE93Wfnh4dCGnXaN0SfBESZSaD-7SAM-wfWjYVmuPQ,1416
125
+ sky/dashboard/out/workspaces.html,sha256=7ZMcln5osssYrAlFoNuHt-0VpawJVWBdUcNMkJ-z1E4,1422
126
+ sky/dashboard/out/_next/static/WD29VpW0S7wsYey0qFBHQ/_buildManifest.js,sha256=osxUordT3Fb32OsAF270nSx4GMgfsKF6Vc8OBBxtPgk,2428
127
+ sky/dashboard/out/_next/static/WD29VpW0S7wsYey0qFBHQ/_ssgManifest.js,sha256=Z49s4suAsf5y_GfnQSvm4qtq2ggxEbZPfEDTXjy6XgA,80
126
128
  sky/dashboard/out/_next/static/chunks/1121-8afcf719ea87debc.js,sha256=fLXxFyYpxIIH-GAL9X9Ew3rc2f6zqOZqg6TjrapDZUM,8554
127
129
  sky/dashboard/out/_next/static/chunks/1141-943efc7aff0f0c06.js,sha256=tUOoU0nIEShZeD5pBiOWrl8-czHc6PpnxxJilnDplHM,17330
128
130
  sky/dashboard/out/_next/static/chunks/1272-1ef0bf0237faccdb.js,sha256=VJ6y-Z6Eg2T93hQIRfWAbjAkQ7nQhglmIaVbEpKSILY,38451
@@ -177,16 +179,14 @@ sky/dashboard/out/_next/static/chunks/pages/jobs/pools/[pool]-07349868f7905d37.j
177
179
  sky/dashboard/out/_next/static/chunks/pages/workspace/new-3f88a1c7e86a3f86.js,sha256=83s5N5CZwIaRcmYMfqn2we60n2VRmgFw6Tbx18b8-e0,762
178
180
  sky/dashboard/out/_next/static/chunks/pages/workspaces/[name]-de06e613e20bc977.js,sha256=8d4XLtF8E3ahNnsbdNUQkJVbM1b9sIG9wRaoRjRwMhE,1495
179
181
  sky/dashboard/out/_next/static/css/4614e06482d7309e.css,sha256=nk6GriyGVd1aGXrLd7BcMibnN4v0z-Q_mXGxrHFWqrE,56126
180
- sky/dashboard/out/_next/static/wN25tc2rkvOkO-qkzIhcD/_buildManifest.js,sha256=osxUordT3Fb32OsAF270nSx4GMgfsKF6Vc8OBBxtPgk,2428
181
- sky/dashboard/out/_next/static/wN25tc2rkvOkO-qkzIhcD/_ssgManifest.js,sha256=Z49s4suAsf5y_GfnQSvm4qtq2ggxEbZPfEDTXjy6XgA,80
182
- sky/dashboard/out/clusters/[cluster].html,sha256=iVENQ7BQVWQv3cbGqKeyrhmMcYFF-NOtCsXSPKfaLto,2936
183
- sky/dashboard/out/clusters/[cluster]/[job].html,sha256=FH2wDhw6sQkmTkEnCXMsCZZiCmjkpVnUNjtcOlodCj0,2073
184
- sky/dashboard/out/infra/[context].html,sha256=N9GD2b8COYVfx21rt6KJCUvNSlTIvURC9FfK-qBypEQ,1436
185
- sky/dashboard/out/jobs/[job].html,sha256=L7UjpbYhk7c5URohFsEqusd6PSgXOxxDufr5r9P4_ak,2304
186
- sky/dashboard/out/jobs/pools/[pool].html,sha256=VlS6EJXuH6HbE4boK7VSz6ngyKYQldIkxpIj8XvaQzg,2142
182
+ sky/dashboard/out/clusters/[cluster].html,sha256=TfiKdGIrEJZZc6MJOkko_69Cd6-8Tg0RIYp-UY-nHuo,2936
183
+ sky/dashboard/out/clusters/[cluster]/[job].html,sha256=S2rHDp3id4EMwJq0U4jnoCnLsAE8iz-MKQdf28V6eq4,2073
184
+ sky/dashboard/out/infra/[context].html,sha256=DM14bZXln96K2C1VFJWXDcdCxbTuv7-ibZH4E7JRJ5s,1436
185
+ sky/dashboard/out/jobs/[job].html,sha256=Br5IUBMRvb0SKhfJAYAQ_Qm5KFYW50YHTl5SQ_rVnLc,2304
186
+ sky/dashboard/out/jobs/pools/[pool].html,sha256=yHWlFSp4AZYmM-9DxNtA9ezOUQ4UBm3_h6ac_ieJCzI,2142
187
187
  sky/dashboard/out/videos/cursor-small.mp4,sha256=8tRdp1vjawOrXUar1cfjOc-nkaKmcwCPZx_LO0XlCvQ,203285
188
- sky/dashboard/out/workspace/new.html,sha256=501TvfqebnOxCAj2s-VWfNwcbVeovXJiju_UychtN7g,1428
189
- sky/dashboard/out/workspaces/[name].html,sha256=MLuZoBOHYSMszSTTFHO4u9ZOy2y0aUkji6f0ka3useU,2759
188
+ sky/dashboard/out/workspace/new.html,sha256=b2EibC2HU-qNsYp-gU2LCcUepku_NL6rA-Lyr_-8rYo,1428
189
+ sky/dashboard/out/workspaces/[name].html,sha256=-qFTEcJPRPEZQQy4YsnPze6voSgVXkOZ2wE--a6EFZQ,2759
190
190
  sky/data/__init__.py,sha256=Nhaf1NURisXpZuwWANa2IuCyppIuc720FRwqSE2oEwY,184
191
191
  sky/data/data_transfer.py,sha256=N8b0CQebDuHieXjvEVwlYmK6DbQxUGG1RQJEyTbh3dU,12040
192
192
  sky/data/data_utils.py,sha256=AjEA_JRjo9NBMlv-Lq5iV4lBED_YZ1VqBR9pG6fGVWE,35179
@@ -199,7 +199,7 @@ sky/jobs/controller.py,sha256=e6a5-AnknM3IVslXtKFs70FQwxe5p1WiZm4mOgo7pmY,38671
199
199
  sky/jobs/recovery_strategy.py,sha256=6DcrbFLeNj322WI7-ldBoxiIMTJAHku4uIuzrgf3NhQ,31276
200
200
  sky/jobs/scheduler.py,sha256=iBcMy0SS60QxvwK93HAziFErt66t_66CckFP6i7pJDU,15265
201
201
  sky/jobs/state.py,sha256=eDlI8eB2RGR-B1UDYRfcBsAJOp_K9DZOl91tkUEYcAc,67404
202
- sky/jobs/utils.py,sha256=xlq0oftp7ZqSGvijyGOac45B9K6tsZhdlAGwg_lm720,85546
202
+ sky/jobs/utils.py,sha256=1FLCcD-RHyA9xZdHmZO2mlb-NVpMiyQ85oETx0wbApc,85690
203
203
  sky/jobs/client/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
204
204
  sky/jobs/client/sdk.py,sha256=MqaI2sotaQQWBFzawB5tnWNX_OcMLiO-Dsi5zcc8IeU,16405
205
205
  sky/jobs/client/sdk_async.py,sha256=qOI5TB5FDdX36R9rZ1lL9ouzQtJ6qnZxuK9uoKF86oU,4791
@@ -258,7 +258,7 @@ sky/provision/hyperbolic/utils.py,sha256=NCa3ULvIi64-YHYoOnPd3SShlJ6VuQsEwaTBqHF
258
258
  sky/provision/kubernetes/__init__.py,sha256=xzVA9OCga0pCdUAQ7zZiCZMdq-Y0182oHlIKWESA15A,896
259
259
  sky/provision/kubernetes/config.py,sha256=iuKFZdivSaEOZf6PWz3JLju3bqyIuO58jTb9fFUn8nE,29632
260
260
  sky/provision/kubernetes/constants.py,sha256=vZJQsAVjAgwsOskB48tIFSXtNw7IFnJOQE_H6N-vOYQ,1130
261
- sky/provision/kubernetes/instance.py,sha256=kAsQ_uVkX31Sm4aaPCo5IlT1nohaveIi98mHA921pE8,67181
261
+ sky/provision/kubernetes/instance.py,sha256=Z9c3nUIniijD9OMQ1PO4YyuiL4764w5P_3MzSWTL-Fg,67333
262
262
  sky/provision/kubernetes/network.py,sha256=Dgj8u7IQBHKHt-mSDhYzue1wfDk96FR_8fO89TwuZ2E,12846
263
263
  sky/provision/kubernetes/network_utils.py,sha256=EROwcgkdVawLQVkw6cpRaEg4k2pS0V8dEoO8vh9G9Kc,12273
264
264
  sky/provision/kubernetes/utils.py,sha256=8H9lTtLCOCQ4k-85dieIzDfY6ylbv16hPei7oZuRDys,153609
@@ -358,8 +358,8 @@ sky/server/config.py,sha256=XWf5Kw4am6vMO5wcyWevbQAFH-dmKb7AMEgDzD083-M,8538
358
358
  sky/server/constants.py,sha256=yjX8t73w6gj3_SDSP4vBFdNdiOqq7dnlXT2pw3yo0jM,2321
359
359
  sky/server/daemons.py,sha256=3cwp-Os2StWLaOF21Sv4jzJ1zkEYpKuiKF5HFkg86WA,8700
360
360
  sky/server/metrics.py,sha256=6H6n6dq_C5HMaU97mJlRUB9bqOEA_k205PO15wE3AWk,3648
361
- sky/server/rest.py,sha256=XExs_gWGnHQCgXcxdSW7MRr9iJ66b1WDMpkkYWa_LNc,12684
362
- sky/server/server.py,sha256=Efz0FCC_oYWLFyuUbRnJoz1rrtc6-nBvjnZE_MGN6jY,78401
361
+ sky/server/rest.py,sha256=tuP9sW1K3-k60qCznOxSN_cXKGAuqzbC2ROJFh2OV7k,14209
362
+ sky/server/server.py,sha256=YTFhgaAKMIYvxwKdgPoAc0CP7TlVEm6AvEmrMEB8uqY,78411
363
363
  sky/server/state.py,sha256=YbVOMJ1JipQQv17gLIGyiGN7MKfnP83qlUa5MB1z0Yk,747
364
364
  sky/server/stream_utils.py,sha256=RS4RuMxQqTGqp3uxzZVtmFWzos4d49P7hMX_VklzEVU,9189
365
365
  sky/server/uvicorn.py,sha256=7K-_Xge8EDWGqunqzSqPzGVBo5X1F8snKzWmzE2FdrY,9292
@@ -371,7 +371,7 @@ sky/server/html/log.html,sha256=TSGZktua9Ysl_ysg3w60rjxAxhH61AJnsYDHdtqrjmI,6929
371
371
  sky/server/html/token_page.html,sha256=eUndS5u1foL9vaWGPRTLMt7lCzD1g0wYJ2v_EeeFzlc,7046
372
372
  sky/server/requests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
373
373
  sky/server/requests/event_loop.py,sha256=OhpPbuce65bbjpGRlcJa78AVnYSm08SzFKt70ypCUuQ,1211
374
- sky/server/requests/executor.py,sha256=1TFMCK2-VyyxhkPitOyUk-3Eutozw_H9ncs-9OBrekc,27168
374
+ sky/server/requests/executor.py,sha256=QPF53TTi3j_rw1pd6hYAJunVy3sCkHwBMQQB3MKRZ8I,27175
375
375
  sky/server/requests/payloads.py,sha256=H7XgGTTBcL6qey2NvzYIek7nGxA_V-qyfYMRkj72KTc,26229
376
376
  sky/server/requests/preconditions.py,sha256=uUQjzFFHf7O5-WvBypMzqViGmd1CXksbqrrDPmY_s_Y,7178
377
377
  sky/server/requests/process.py,sha256=UpJp5rZizNMFRCNRtudFSjbcJhFarFbtAGDWI9x_ZyE,13197
@@ -380,8 +380,8 @@ sky/server/requests/queues/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJ
380
380
  sky/server/requests/queues/local_queue.py,sha256=X6VkBiUmgd_kfqIK1hCtMWG1b8GiZbY70TBiBR6c6GY,416
381
381
  sky/server/requests/queues/mp_queue.py,sha256=jDqP4Jd28U3ibSFyMR1DF9I2OWZrPZqFJrG5S6RFpyw,3403
382
382
  sky/server/requests/serializers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
383
- sky/server/requests/serializers/decoders.py,sha256=KSOy147DLT05RBEHpnFyY0Pi3hxMWl_y-dWGfTDCMeU,7175
384
- sky/server/requests/serializers/encoders.py,sha256=b0RmAqAkKYoetw_qyGkSN-Y-kab9pN1a38kBzu-zj8c,7425
383
+ sky/server/requests/serializers/decoders.py,sha256=-1Z9iCW-gWSEWdLy4G3Qxg7Y7QoEz3dW95QrNAAKIFc,7335
384
+ sky/server/requests/serializers/encoders.py,sha256=EsKpscRTjxLRgDDw4DgJNjmRu1q-5bvj6zBe-tebaLc,7584
385
385
  sky/setup_files/MANIFEST.in,sha256=4gbgHHwSdP6BbMJv5XOt-2K6wUVWF_T9CGsdESvh918,776
386
386
  sky/setup_files/alembic.ini,sha256=854_UKvCaFmZ8vI16tSHbGgP9IMFQ42Td6c9Zmn2Oxs,5079
387
387
  sky/setup_files/dependencies.py,sha256=wvF2ZpKeQ0_Gs-Y2GVtbLoINKaRQGZ0SCkiQ70yff3U,7241
@@ -454,7 +454,7 @@ sky/usage/constants.py,sha256=mFrTgrFIfFf4kpcl-M1VDU7_moD5_mJazUJTUDrybms,1102
454
454
  sky/usage/usage_lib.py,sha256=JlKupp72xYGDbk9UbfTq_tPBoJ2CxZyjeIvajgYdU7I,21470
455
455
  sky/users/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
456
456
  sky/users/model.conf,sha256=nPAaMai2fc-nlnEDTfW5Lyw6vgCcOS32BSms4aFOHoY,259
457
- sky/users/permission.py,sha256=EL-a1yrZXqC_KLZcDY5yfBtcKvZj2KP3CYYJoZop6SY,15696
457
+ sky/users/permission.py,sha256=ttqU5aVH9gNTIkO8vGeURTwC8eB5yYSFVGUbgNNbzpo,15563
458
458
  sky/users/rbac.py,sha256=3ZWukXo85u6zWbPmHcPsF9EtZ3cd_51PLZYf2h-7uAM,3636
459
459
  sky/users/server.py,sha256=RyxxbjHkL3bIQMqzOkwBnPp05lVdKWabu8inshLfOcI,27921
460
460
  sky/users/token_service.py,sha256=78Xgm6rkd5M6IMMUekAp2YNLms4teNNvVDPfHh_5jts,7804
@@ -533,9 +533,9 @@ sky/workspaces/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
533
533
  sky/workspaces/core.py,sha256=AjwbbRwk0glzCnqICJk4sQzMoUcawixbXoQWKLB3-aQ,25372
534
534
  sky/workspaces/server.py,sha256=Box45DS54xXGHy7I3tGKGy-JP0a8G_z6IhfvGlEXtsA,3439
535
535
  sky/workspaces/utils.py,sha256=IIAiFoS6sdb2t0X5YoX9AietpTanZUQNTK8cePun-sY,2143
536
- skypilot_nightly-1.0.0.dev20250821.dist-info/licenses/LICENSE,sha256=emRJAvE7ngL6x0RhQvlns5wJzGI3NEQ_WMjNmd9TZc4,12170
537
- skypilot_nightly-1.0.0.dev20250821.dist-info/METADATA,sha256=Ehg2NgMdI9qWbtiqNMNEeT4zd5h2d5jMHvQr1QD6LIk,20089
538
- skypilot_nightly-1.0.0.dev20250821.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
539
- skypilot_nightly-1.0.0.dev20250821.dist-info/entry_points.txt,sha256=StA6HYpuHj-Y61L2Ze-hK2IcLWgLZcML5gJu8cs6nU4,36
540
- skypilot_nightly-1.0.0.dev20250821.dist-info/top_level.txt,sha256=qA8QuiNNb6Y1OF-pCUtPEr6sLEwy2xJX06Bd_CrtrHY,4
541
- skypilot_nightly-1.0.0.dev20250821.dist-info/RECORD,,
536
+ skypilot_nightly-1.0.0.dev20250822.dist-info/licenses/LICENSE,sha256=emRJAvE7ngL6x0RhQvlns5wJzGI3NEQ_WMjNmd9TZc4,12170
537
+ skypilot_nightly-1.0.0.dev20250822.dist-info/METADATA,sha256=eG4bGnOQAVS7iFvN1ab_ig1jOI2j2-4NDyujLPI_bUQ,20080
538
+ skypilot_nightly-1.0.0.dev20250822.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
539
+ skypilot_nightly-1.0.0.dev20250822.dist-info/entry_points.txt,sha256=StA6HYpuHj-Y61L2Ze-hK2IcLWgLZcML5gJu8cs6nU4,36
540
+ skypilot_nightly-1.0.0.dev20250822.dist-info/top_level.txt,sha256=qA8QuiNNb6Y1OF-pCUtPEr6sLEwy2xJX06Bd_CrtrHY,4
541
+ skypilot_nightly-1.0.0.dev20250822.dist-info/RECORD,,