skypilot-nightly 1.0.0.dev20250821__py3-none-any.whl → 1.0.0.dev20250823__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.
- sky/__init__.py +2 -2
- sky/backends/backend_utils.py +33 -6
- sky/client/cli/command.py +4 -1
- sky/client/sdk.py +75 -21
- sky/client/sdk_async.py +1 -1
- sky/clouds/nebius.py +1 -0
- sky/core.py +3 -5
- sky/dashboard/out/404.html +1 -1
- sky/dashboard/out/clusters/[cluster]/[job].html +1 -1
- sky/dashboard/out/clusters/[cluster].html +1 -1
- sky/dashboard/out/clusters.html +1 -1
- sky/dashboard/out/config.html +1 -1
- sky/dashboard/out/index.html +1 -1
- sky/dashboard/out/infra/[context].html +1 -1
- sky/dashboard/out/infra.html +1 -1
- sky/dashboard/out/jobs/[job].html +1 -1
- sky/dashboard/out/jobs/pools/[pool].html +1 -1
- sky/dashboard/out/jobs.html +1 -1
- sky/dashboard/out/users.html +1 -1
- sky/dashboard/out/volumes.html +1 -1
- sky/dashboard/out/workspace/new.html +1 -1
- sky/dashboard/out/workspaces/[name].html +1 -1
- sky/dashboard/out/workspaces.html +1 -1
- sky/exceptions.py +8 -0
- sky/jobs/utils.py +10 -3
- sky/optimizer.py +14 -4
- sky/provision/kubernetes/instance.py +4 -1
- sky/server/requests/executor.py +2 -2
- sky/server/requests/serializers/decoders.py +7 -0
- sky/server/requests/serializers/encoders.py +5 -0
- sky/server/rest.py +48 -8
- sky/server/server.py +8 -6
- sky/users/permission.py +4 -6
- {skypilot_nightly-1.0.0.dev20250821.dist-info → skypilot_nightly-1.0.0.dev20250823.dist-info}/METADATA +3 -3
- {skypilot_nightly-1.0.0.dev20250821.dist-info → skypilot_nightly-1.0.0.dev20250823.dist-info}/RECORD +41 -41
- /sky/dashboard/out/_next/static/{wN25tc2rkvOkO-qkzIhcD → UQeqZCi6L_itwVPDcn3ba}/_buildManifest.js +0 -0
- /sky/dashboard/out/_next/static/{wN25tc2rkvOkO-qkzIhcD → UQeqZCi6L_itwVPDcn3ba}/_ssgManifest.js +0 -0
- {skypilot_nightly-1.0.0.dev20250821.dist-info → skypilot_nightly-1.0.0.dev20250823.dist-info}/WHEEL +0 -0
- {skypilot_nightly-1.0.0.dev20250821.dist-info → skypilot_nightly-1.0.0.dev20250823.dist-info}/entry_points.txt +0 -0
- {skypilot_nightly-1.0.0.dev20250821.dist-info → skypilot_nightly-1.0.0.dev20250823.dist-info}/licenses/LICENSE +0 -0
- {skypilot_nightly-1.0.0.dev20250821.dist-info → skypilot_nightly-1.0.0.dev20250823.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 = '
|
|
10
|
+
_SKYPILOT_COMMIT_SHA = 'e939c0d06e7bd2f973087a8c3005d357e1e29835'
|
|
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.
|
|
40
|
+
__version__ = '1.0.0.dev20250823'
|
|
41
41
|
__root_dir__ = directory_utils.get_sky_dir()
|
|
42
42
|
|
|
43
43
|
|
sky/backends/backend_utils.py
CHANGED
|
@@ -106,6 +106,9 @@ _LAUNCHED_RESERVED_WORKER_PATTERN = re.compile(
|
|
|
106
106
|
# 10.133.0.5: ray.worker.default,
|
|
107
107
|
_LAUNCHING_IP_PATTERN = re.compile(
|
|
108
108
|
r'({}): ray[._]worker[._](?:default|reserved)'.format(IP_ADDR_REGEX))
|
|
109
|
+
_SSH_CONNECTION_TIMED_OUT_PATTERN = re.compile(r'^ssh:.*timed out$',
|
|
110
|
+
re.IGNORECASE)
|
|
111
|
+
_RAY_CLUSTER_NOT_FOUND_MESSAGE = 'Ray cluster is not found'
|
|
109
112
|
WAIT_HEAD_NODE_IP_MAX_ATTEMPTS = 3
|
|
110
113
|
|
|
111
114
|
# We check network connection by going through _TEST_IP_LIST. We may need to
|
|
@@ -2047,11 +2050,11 @@ def _update_cluster_status(cluster_name: str) -> Optional[Dict[str, Any]]:
|
|
|
2047
2050
|
require_outputs=True,
|
|
2048
2051
|
separate_stderr=True)
|
|
2049
2052
|
if rc:
|
|
2050
|
-
raise
|
|
2051
|
-
|
|
2052
|
-
f'ray cluster\'s healthiness
|
|
2053
|
-
|
|
2054
|
-
f'
|
|
2053
|
+
raise exceptions.CommandError(
|
|
2054
|
+
rc, instance_setup.RAY_STATUS_WITH_SKY_RAY_PORT_COMMAND,
|
|
2055
|
+
f'Failed to check ray cluster\'s healthiness.\n'
|
|
2056
|
+
'-- stdout --\n'
|
|
2057
|
+
f'{output}\n', stderr)
|
|
2055
2058
|
return (*_count_healthy_nodes_from_ray(output), output, stderr)
|
|
2056
2059
|
|
|
2057
2060
|
def run_ray_status_to_check_ray_cluster_healthy() -> bool:
|
|
@@ -2082,10 +2085,34 @@ def _update_cluster_status(cluster_name: str) -> Optional[Dict[str, Any]]:
|
|
|
2082
2085
|
try:
|
|
2083
2086
|
ready_head, ready_workers, output, stderr = (
|
|
2084
2087
|
get_node_counts_from_ray_status(head_runner))
|
|
2085
|
-
except
|
|
2088
|
+
except exceptions.CommandError as e:
|
|
2086
2089
|
logger.debug(f'Refreshing status ({cluster_name!r}) attempt'
|
|
2087
2090
|
f' {i}: {common_utils.format_exception(e)}')
|
|
2088
2091
|
if cloud_name != 'kubernetes':
|
|
2092
|
+
# Non-k8s clusters can be manually restarted and:
|
|
2093
|
+
# 1. Get new IP addresses, or
|
|
2094
|
+
# 2. Not have the SkyPilot runtime setup
|
|
2095
|
+
#
|
|
2096
|
+
# So we should surface a message to the user to
|
|
2097
|
+
# help them recover from this inconsistent state.
|
|
2098
|
+
has_new_ip_addr = (
|
|
2099
|
+
e.detailed_reason is not None and
|
|
2100
|
+
_SSH_CONNECTION_TIMED_OUT_PATTERN.search(
|
|
2101
|
+
e.detailed_reason.strip()) is not None)
|
|
2102
|
+
runtime_not_setup = (_RAY_CLUSTER_NOT_FOUND_MESSAGE
|
|
2103
|
+
in e.error_msg)
|
|
2104
|
+
if has_new_ip_addr or runtime_not_setup:
|
|
2105
|
+
yellow = colorama.Fore.YELLOW
|
|
2106
|
+
bright = colorama.Style.BRIGHT
|
|
2107
|
+
reset = colorama.Style.RESET_ALL
|
|
2108
|
+
ux_utils.console_newline()
|
|
2109
|
+
logger.warning(
|
|
2110
|
+
f'{yellow}Failed getting cluster status despite all nodes '
|
|
2111
|
+
f'being up ({cluster_name!r}). '
|
|
2112
|
+
f'If the cluster was restarted manually, try running: '
|
|
2113
|
+
f'{reset}{bright}sky start {cluster_name}{reset} '
|
|
2114
|
+
f'{yellow}to recover from INIT status.{reset}')
|
|
2115
|
+
return False
|
|
2089
2116
|
raise e
|
|
2090
2117
|
# We retry for kubernetes because coreweave can have a
|
|
2091
2118
|
# transient network issue.
|
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(
|
|
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,
|
|
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
|
-
|
|
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(
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
|
|
807
|
-
|
|
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
|
-
|
|
821
|
-
|
|
822
|
-
|
|
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
|
-
|
|
851
|
-
|
|
852
|
-
|
|
853
|
-
|
|
854
|
-
|
|
855
|
-
|
|
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,9 +1510,17 @@ def status(
|
|
|
1466
1510
|
def endpoints(
|
|
1467
1511
|
cluster: str,
|
|
1468
1512
|
port: Optional[Union[int, str]] = None
|
|
1469
|
-
) -> server_common.RequestId[Dict[
|
|
1513
|
+
) -> server_common.RequestId[Dict[int, str]]:
|
|
1470
1514
|
"""Gets the endpoint for a given cluster and port number (endpoint).
|
|
1471
1515
|
|
|
1516
|
+
Example:
|
|
1517
|
+
.. code-block:: python
|
|
1518
|
+
|
|
1519
|
+
import sky
|
|
1520
|
+
request_id = sky.endpoints('test-cluster')
|
|
1521
|
+
sky.get(request_id)
|
|
1522
|
+
|
|
1523
|
+
|
|
1472
1524
|
Args:
|
|
1473
1525
|
cluster: The name of the cluster.
|
|
1474
1526
|
port: The port number to get the endpoint for. If None, endpoints
|
|
@@ -1478,8 +1530,9 @@ def endpoints(
|
|
|
1478
1530
|
The request ID of the endpoints request.
|
|
1479
1531
|
|
|
1480
1532
|
Request Returns:
|
|
1481
|
-
A dictionary of port numbers to endpoints.
|
|
1482
|
-
|
|
1533
|
+
A dictionary of port numbers to endpoints.
|
|
1534
|
+
If port is None, the dictionary contains all
|
|
1535
|
+
ports:endpoints exposed on the cluster.
|
|
1483
1536
|
|
|
1484
1537
|
Request Raises:
|
|
1485
1538
|
ValueError: if the cluster is not UP or the endpoint is not exposed.
|
|
@@ -1944,6 +1997,7 @@ def stream_and_get(request_id: None = None,
|
|
|
1944
1997
|
@usage_lib.entrypoint
|
|
1945
1998
|
@server_common.check_server_healthy_or_start
|
|
1946
1999
|
@annotations.client_api
|
|
2000
|
+
@rest.retry_transient_errors()
|
|
1947
2001
|
def stream_and_get(
|
|
1948
2002
|
request_id: Optional[server_common.RequestId[T]] = None,
|
|
1949
2003
|
log_path: Optional[str] = None,
|
|
@@ -1995,7 +2049,7 @@ def stream_and_get(
|
|
|
1995
2049
|
if response.status_code in [404, 400]:
|
|
1996
2050
|
detail = response.json().get('detail')
|
|
1997
2051
|
with ux_utils.print_exception_no_traceback():
|
|
1998
|
-
raise
|
|
2052
|
+
raise exceptions.ClientError(f'Failed to stream logs: {detail}')
|
|
1999
2053
|
elif response.status_code != 200:
|
|
2000
2054
|
# TODO(syang): handle the case where the requestID is not provided
|
|
2001
2055
|
# 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[
|
|
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/clouds/nebius.py
CHANGED
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[
|
|
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
|
|
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
|
-
|
|
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
|
sky/dashboard/out/404.html
CHANGED
|
@@ -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/
|
|
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/UQeqZCi6L_itwVPDcn3ba/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/UQeqZCi6L_itwVPDcn3ba/_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":"UQeqZCi6L_itwVPDcn3ba","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/
|
|
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/UQeqZCi6L_itwVPDcn3ba/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/UQeqZCi6L_itwVPDcn3ba/_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":"UQeqZCi6L_itwVPDcn3ba","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/
|
|
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/UQeqZCi6L_itwVPDcn3ba/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/UQeqZCi6L_itwVPDcn3ba/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/clusters/[cluster]","query":{},"buildId":"UQeqZCi6L_itwVPDcn3ba","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
|
sky/dashboard/out/clusters.html
CHANGED
|
@@ -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/
|
|
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/UQeqZCi6L_itwVPDcn3ba/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/UQeqZCi6L_itwVPDcn3ba/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/clusters","query":{},"buildId":"UQeqZCi6L_itwVPDcn3ba","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
|
sky/dashboard/out/config.html
CHANGED
|
@@ -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/
|
|
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/UQeqZCi6L_itwVPDcn3ba/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/UQeqZCi6L_itwVPDcn3ba/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/config","query":{},"buildId":"UQeqZCi6L_itwVPDcn3ba","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
|
sky/dashboard/out/index.html
CHANGED
|
@@ -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/
|
|
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/UQeqZCi6L_itwVPDcn3ba/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/UQeqZCi6L_itwVPDcn3ba/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/","query":{},"buildId":"UQeqZCi6L_itwVPDcn3ba","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/
|
|
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/UQeqZCi6L_itwVPDcn3ba/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/UQeqZCi6L_itwVPDcn3ba/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/infra/[context]","query":{},"buildId":"UQeqZCi6L_itwVPDcn3ba","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
|
sky/dashboard/out/infra.html
CHANGED
|
@@ -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/
|
|
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/UQeqZCi6L_itwVPDcn3ba/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/UQeqZCi6L_itwVPDcn3ba/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/infra","query":{},"buildId":"UQeqZCi6L_itwVPDcn3ba","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/
|
|
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/UQeqZCi6L_itwVPDcn3ba/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/UQeqZCi6L_itwVPDcn3ba/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/jobs/[job]","query":{},"buildId":"UQeqZCi6L_itwVPDcn3ba","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/
|
|
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/UQeqZCi6L_itwVPDcn3ba/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/UQeqZCi6L_itwVPDcn3ba/_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":"UQeqZCi6L_itwVPDcn3ba","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
|
sky/dashboard/out/jobs.html
CHANGED
|
@@ -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/
|
|
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/UQeqZCi6L_itwVPDcn3ba/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/UQeqZCi6L_itwVPDcn3ba/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/jobs","query":{},"buildId":"UQeqZCi6L_itwVPDcn3ba","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
|
sky/dashboard/out/users.html
CHANGED
|
@@ -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/
|
|
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/UQeqZCi6L_itwVPDcn3ba/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/UQeqZCi6L_itwVPDcn3ba/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/users","query":{},"buildId":"UQeqZCi6L_itwVPDcn3ba","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
|
sky/dashboard/out/volumes.html
CHANGED
|
@@ -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/
|
|
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/UQeqZCi6L_itwVPDcn3ba/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/UQeqZCi6L_itwVPDcn3ba/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/volumes","query":{},"buildId":"UQeqZCi6L_itwVPDcn3ba","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/
|
|
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/UQeqZCi6L_itwVPDcn3ba/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/UQeqZCi6L_itwVPDcn3ba/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/workspace/new","query":{},"buildId":"UQeqZCi6L_itwVPDcn3ba","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/
|
|
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/UQeqZCi6L_itwVPDcn3ba/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/UQeqZCi6L_itwVPDcn3ba/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/workspaces/[name]","query":{},"buildId":"UQeqZCi6L_itwVPDcn3ba","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/
|
|
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/UQeqZCi6L_itwVPDcn3ba/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/UQeqZCi6L_itwVPDcn3ba/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/workspaces","query":{},"buildId":"UQeqZCi6L_itwVPDcn3ba","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
|
-
'
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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 '
|
sky/server/requests/executor.py
CHANGED
|
@@ -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
|
-
|
|
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
|
|
@@ -60,6 +60,8 @@ def decode_status(
|
|
|
60
60
|
cluster['status'] = status_lib.ClusterStatus(cluster['status'])
|
|
61
61
|
cluster['storage_mounts_metadata'] = decode_and_unpickle(
|
|
62
62
|
cluster['storage_mounts_metadata'])
|
|
63
|
+
if 'is_managed' not in cluster:
|
|
64
|
+
cluster['is_managed'] = False
|
|
63
65
|
response.append(responses.StatusResponse.model_validate(cluster))
|
|
64
66
|
return response
|
|
65
67
|
|
|
@@ -203,3 +205,8 @@ def decode_job_status(
|
|
|
203
205
|
def decode_kubernetes_node_info(
|
|
204
206
|
return_value: Dict[str, Any]) -> models.KubernetesNodesInfo:
|
|
205
207
|
return models.KubernetesNodesInfo.from_dict(return_value)
|
|
208
|
+
|
|
209
|
+
|
|
210
|
+
@register_decoders('endpoints')
|
|
211
|
+
def decode_endpoints(return_value: Dict[int, str]) -> Dict[int, str]:
|
|
212
|
+
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
|
@@ -34,6 +34,16 @@ F = TypeVar('F', bound=Callable[..., Any])
|
|
|
34
34
|
_RETRY_CONTEXT = contextvars.ContextVar('retry_context', default=None)
|
|
35
35
|
|
|
36
36
|
_session = requests.Session()
|
|
37
|
+
# Tune connection pool size, otherwise the default max is just 10.
|
|
38
|
+
adapter = requests.adapters.HTTPAdapter(
|
|
39
|
+
pool_connections=50,
|
|
40
|
+
pool_maxsize=200,
|
|
41
|
+
# We handle retries by ourselves in SDK.
|
|
42
|
+
max_retries=0,
|
|
43
|
+
)
|
|
44
|
+
_session.mount('http://', adapter)
|
|
45
|
+
_session.mount('https://', adapter)
|
|
46
|
+
|
|
37
47
|
_session.headers[constants.API_VERSION_HEADER] = str(constants.API_VERSION)
|
|
38
48
|
_session.headers[constants.VERSION_HEADER] = (
|
|
39
49
|
versions.get_local_readable_version())
|
|
@@ -47,9 +57,10 @@ class RetryContext:
|
|
|
47
57
|
|
|
48
58
|
@contextlib.contextmanager
|
|
49
59
|
def _retry_in_context():
|
|
50
|
-
|
|
60
|
+
context = RetryContext()
|
|
61
|
+
token = _RETRY_CONTEXT.set(context)
|
|
51
62
|
try:
|
|
52
|
-
yield
|
|
63
|
+
yield context
|
|
53
64
|
finally:
|
|
54
65
|
_RETRY_CONTEXT.reset(token)
|
|
55
66
|
|
|
@@ -76,6 +87,8 @@ def retry_transient_errors(max_retries: int = 3,
|
|
|
76
87
|
if isinstance(e, requests.exceptions.HTTPError):
|
|
77
88
|
# Only server error is considered as transient.
|
|
78
89
|
return e.response.status_code >= 500
|
|
90
|
+
if isinstance(e, exceptions.ClientError):
|
|
91
|
+
return False
|
|
79
92
|
# It is hard to enumerate all other errors that are transient, e.g.
|
|
80
93
|
# broken pipe, connection refused, etc. Instead, it is safer to assume
|
|
81
94
|
# all other errors might be transient since we only retry for 3 times
|
|
@@ -88,26 +101,53 @@ def retry_transient_errors(max_retries: int = 3,
|
|
|
88
101
|
@functools.wraps(func)
|
|
89
102
|
def wrapper(*args, **kwargs):
|
|
90
103
|
backoff = common_utils.Backoff(initial_backoff, max_backoff_factor)
|
|
91
|
-
|
|
92
|
-
|
|
104
|
+
consecutive_failed_count = 0
|
|
105
|
+
|
|
106
|
+
with _retry_in_context() as context:
|
|
107
|
+
previous_line_processed = context.line_processed # should be 0
|
|
108
|
+
|
|
109
|
+
def _handle_exception():
|
|
110
|
+
# If the function made progress on a retry,
|
|
111
|
+
# clears the backoff and resets the failed retry count.
|
|
112
|
+
# Otherwise, increments the failed retry count.
|
|
113
|
+
nonlocal backoff
|
|
114
|
+
nonlocal consecutive_failed_count
|
|
115
|
+
nonlocal previous_line_processed
|
|
116
|
+
if context.line_processed > previous_line_processed:
|
|
117
|
+
backoff = common_utils.Backoff(initial_backoff,
|
|
118
|
+
max_backoff_factor)
|
|
119
|
+
previous_line_processed = context.line_processed
|
|
120
|
+
consecutive_failed_count = 0
|
|
121
|
+
else:
|
|
122
|
+
consecutive_failed_count += 1
|
|
123
|
+
|
|
124
|
+
while consecutive_failed_count < max_retries:
|
|
93
125
|
try:
|
|
94
126
|
return func(*args, **kwargs)
|
|
95
127
|
# Occurs when the server proactively interrupts the request
|
|
96
128
|
# during rolling update, we can retry immediately on the
|
|
97
129
|
# new replica.
|
|
98
130
|
except exceptions.RequestInterruptedError:
|
|
131
|
+
_handle_exception()
|
|
99
132
|
logger.debug('Request interrupted. Retry immediately.')
|
|
100
133
|
continue
|
|
101
134
|
except Exception as e: # pylint: disable=broad-except
|
|
102
|
-
|
|
135
|
+
_handle_exception()
|
|
136
|
+
if consecutive_failed_count >= max_retries:
|
|
103
137
|
# Retries exhausted.
|
|
104
138
|
raise
|
|
105
139
|
if not is_transient_error(e):
|
|
106
140
|
# Permanent error, no need to retry.
|
|
107
141
|
raise
|
|
108
|
-
logger.debug(
|
|
109
|
-
|
|
110
|
-
|
|
142
|
+
logger.debug(
|
|
143
|
+
f'Retry {func.__name__} due to {e}, '
|
|
144
|
+
f'attempt {consecutive_failed_count}/{max_retries}')
|
|
145
|
+
# Only sleep if this is not the first retry.
|
|
146
|
+
# The idea is that if the function made progress on a
|
|
147
|
+
# retry, we should try again immediately to reduce the
|
|
148
|
+
# waiting time.
|
|
149
|
+
if consecutive_failed_count > 0:
|
|
150
|
+
time.sleep(backoff.current_backoff())
|
|
111
151
|
|
|
112
152
|
return cast(F, wrapper)
|
|
113
153
|
|
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
|
-
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
3
|
+
Version: 1.0.0.dev20250823
|
|
4
4
|
Summary: SkyPilot: Run AI on Any Infra — Unified, Faster, Cheaper.
|
|
5
5
|
Author: SkyPilot Team
|
|
6
6
|
License: Apache 2.0
|
|
@@ -253,12 +253,12 @@ Dynamic: summary
|
|
|
253
253
|
|
|
254
254
|
----
|
|
255
255
|
|
|
256
|
-
SkyPilot is a system
|
|
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.
|
|
260
260
|
|
|
261
|
-
|
|
261
|
+
<img src="./docs/source/images/skypilot-abstractions-long-2.png" alt="SkyPilot Abstractions">
|
|
262
262
|
|
|
263
263
|
## Overview
|
|
264
264
|
|
{skypilot_nightly-1.0.0.dev20250821.dist-info → skypilot_nightly-1.0.0.dev20250823.dist-info}/RECORD
RENAMED
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
sky/__init__.py,sha256=
|
|
1
|
+
sky/__init__.py,sha256=BwfFLYrGz9-n2GftMuLARfdizYy8-vvQj0fqK3_ZK5I,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=
|
|
7
|
+
sky/core.py,sha256=w6v_T5BNynOgUCc8_85U61wRlxLuF91n0fe0aC6ZqPc,57461
|
|
8
8
|
sky/dag.py,sha256=0ZpAEDXuIFo1SP7YJpF9vXiFxpRwqP8od-UXMg95td8,3929
|
|
9
|
-
sky/exceptions.py,sha256=
|
|
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=
|
|
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
|
|
@@ -35,7 +35,7 @@ sky/adaptors/vast.py,sha256=tpvmHi7IkQNzbbHVkeo04kUSajoEpSzXr2XgeO_I1LU,695
|
|
|
35
35
|
sky/adaptors/vsphere.py,sha256=zJP9SeObEoLrpgHW2VHvZE48EhgVf8GfAEIwBeaDMfM,2129
|
|
36
36
|
sky/backends/__init__.py,sha256=tpa9gAygQopsiBUUuy3wVmr4E05FoPTFHIWqEo4i-u0,627
|
|
37
37
|
sky/backends/backend.py,sha256=DcZZYgBvhghjLnD1C2TvgAisPpcqT0oYNJ3p_P-0UT4,8098
|
|
38
|
-
sky/backends/backend_utils.py,sha256=
|
|
38
|
+
sky/backends/backend_utils.py,sha256=TTwnjhW7hVNnrVQe8dyVxHssSxL-_4mZiT-qaFQgur8,157967
|
|
39
39
|
sky/backends/cloud_vm_ray_backend.py,sha256=X-FJiOX82-Z8Ut2zX7T6u3T9rN4gxD7huwqrjriIVI8,275131
|
|
40
40
|
sky/backends/docker_utils.py,sha256=_EhM6NStZDAwcegppQqExaB5iuSn1qL4xFFUqXAz2Uk,8392
|
|
41
41
|
sky/backends/local_docker_backend.py,sha256=i_Ff6MUNiIJKknTJw0YtQcvDlba2F7f44lx_eZKfP40,17409
|
|
@@ -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=
|
|
82
|
-
sky/client/sdk_async.py,sha256=
|
|
81
|
+
sky/client/sdk.py,sha256=5KXbjRwgpQSQMUgbfTq-FEEhB3znySZ4RFhxpG62qDg,103905
|
|
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=
|
|
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
|
|
@@ -98,7 +98,7 @@ sky/clouds/hyperbolic.py,sha256=bmV4NFpUPgzR0ownavHHVqyw26EtOgQ_ZB6SlxlgmJw,1199
|
|
|
98
98
|
sky/clouds/ibm.py,sha256=qMbOkTMJzPn2HDH9cie9zERvukRZbZoueLIaufCECAw,22860
|
|
99
99
|
sky/clouds/kubernetes.py,sha256=G_U7G04pJYU8xnvIP-48d4umKUbLGHc-5Vv1EHLbfF8,55446
|
|
100
100
|
sky/clouds/lambda_cloud.py,sha256=aRW4GwLjaFFR6_bPbBr9o8z-SKHtuP18BAVwoPuDtBE,13553
|
|
101
|
-
sky/clouds/nebius.py,sha256=
|
|
101
|
+
sky/clouds/nebius.py,sha256=2CWWZsPJOSttYdyV4vlL5n2UqPmyJ2E9WAD_6s4_WC4,21348
|
|
102
102
|
sky/clouds/oci.py,sha256=U5wtBx78RqCgCAqjlTTgSnRqWWa7D7LIvyoo8097Fno,28571
|
|
103
103
|
sky/clouds/paperspace.py,sha256=-wvFUsUGaOlFYfe3jCdEB3_mwDmK4R66hJy8nX9822o,12010
|
|
104
104
|
sky/clouds/runpod.py,sha256=6ziQZj1YS6QBT4ilYlg8Dg0w_AT1yL9hnvvl4mMssHg,13386
|
|
@@ -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
|
|
116
|
-
sky/dashboard/out/clusters.html,sha256=
|
|
117
|
-
sky/dashboard/out/config.html,sha256=
|
|
115
|
+
sky/dashboard/out/404.html,sha256=VU_KZz5OIw7leUmoss_lNfoHJEsfiNrIjNCzcQKGy0g,1423
|
|
116
|
+
sky/dashboard/out/clusters.html,sha256=nHqi0MlDKnZfbOZpmIcrg-bU7D_lbbFieY8IeJN4bpQ,1418
|
|
117
|
+
sky/dashboard/out/config.html,sha256=iOQgxHEa64juO_zt85_Utg4ze1gEMAD2XnUabCKn3as,1414
|
|
118
118
|
sky/dashboard/out/favicon.ico,sha256=XilUZZglAl_1zRsg85QsbQgmQAzGPQjcUIJ-A3AzYn8,93590
|
|
119
|
-
sky/dashboard/out/index.html,sha256=
|
|
120
|
-
sky/dashboard/out/infra.html,sha256=
|
|
121
|
-
sky/dashboard/out/jobs.html,sha256=
|
|
119
|
+
sky/dashboard/out/index.html,sha256=yqT1xuDX1otLbQt38aHKlsDS7e6dMs2mPGx7QrlhoPk,1407
|
|
120
|
+
sky/dashboard/out/infra.html,sha256=oAIWKfbPvfj90C2ut4g4M15cs_4RFsZg0IfxP2ggh5s,1412
|
|
121
|
+
sky/dashboard/out/jobs.html,sha256=WbydGtptBv6NNKJhkP8VpfqPpBopBvvhYNFt6a3MEUw,1410
|
|
122
122
|
sky/dashboard/out/skypilot.svg,sha256=c0iRtlfLlaUm2p0rG9NFmo5FN0Qhf3pq5Xph-AeMPJw,5064
|
|
123
|
-
sky/dashboard/out/users.html,sha256=
|
|
124
|
-
sky/dashboard/out/volumes.html,sha256=
|
|
125
|
-
sky/dashboard/out/workspaces.html,sha256=
|
|
123
|
+
sky/dashboard/out/users.html,sha256=yaBOpOlBQhBvgInM_VXLWTrWKAdH91Xt0kSCr9olUZY,1412
|
|
124
|
+
sky/dashboard/out/volumes.html,sha256=_rMiIdi161brkEbmJtybh_rTb8MsqI--9mj3X5dg58w,1416
|
|
125
|
+
sky/dashboard/out/workspaces.html,sha256=kwtmrpc0uOaZnNK-yyK3-cKvAUV0RfHlysFUlon7WvM,1422
|
|
126
|
+
sky/dashboard/out/_next/static/UQeqZCi6L_itwVPDcn3ba/_buildManifest.js,sha256=osxUordT3Fb32OsAF270nSx4GMgfsKF6Vc8OBBxtPgk,2428
|
|
127
|
+
sky/dashboard/out/_next/static/UQeqZCi6L_itwVPDcn3ba/_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/
|
|
181
|
-
sky/dashboard/out/
|
|
182
|
-
sky/dashboard/out/
|
|
183
|
-
sky/dashboard/out/
|
|
184
|
-
sky/dashboard/out/
|
|
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=c1rBhrN22oIja-YSb1d6PUvm7xaaHilO2PeAdOUUo94,2936
|
|
183
|
+
sky/dashboard/out/clusters/[cluster]/[job].html,sha256=-aNwxL4-gTZcGn8emPiLsAB5U-3OyjXKhT6shV8dHK0,2073
|
|
184
|
+
sky/dashboard/out/infra/[context].html,sha256=m0bpCX5ian0OXD8sPh5rLFSvYhGZIN82tXFxZOjgf0Y,1436
|
|
185
|
+
sky/dashboard/out/jobs/[job].html,sha256=usSo_E_5QXWDaCRqULXLkti6Kk4sbH8n-j48Osi4p8U,2304
|
|
186
|
+
sky/dashboard/out/jobs/pools/[pool].html,sha256=bPSPpVw8meyHW6BOnW2GKjxROxaLN91YhO_9xQq4SZ4,2142
|
|
187
187
|
sky/dashboard/out/videos/cursor-small.mp4,sha256=8tRdp1vjawOrXUar1cfjOc-nkaKmcwCPZx_LO0XlCvQ,203285
|
|
188
|
-
sky/dashboard/out/workspace/new.html,sha256=
|
|
189
|
-
sky/dashboard/out/workspaces/[name].html,sha256=
|
|
188
|
+
sky/dashboard/out/workspace/new.html,sha256=cZ1MQzT0HkMbEULkjtyx-mL9utFXqXU9E8PNUONxqDA,1428
|
|
189
|
+
sky/dashboard/out/workspaces/[name].html,sha256=mpjCuSB6Jw7ui6-P2apmIzPcyrSaXhgfV2iikVX20wU,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=
|
|
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=
|
|
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=
|
|
362
|
-
sky/server/server.py,sha256=
|
|
361
|
+
sky/server/rest.py,sha256=GAT1uS5tacRqBbbECbVxMsnEIdEFjjuqAryNgz0IiYA,14502
|
|
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=
|
|
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=
|
|
384
|
-
sky/server/requests/serializers/encoders.py,sha256=
|
|
383
|
+
sky/server/requests/serializers/decoders.py,sha256=zE2BeTYVcBAK6a_V9YmMPRBQ9xos5tjdkrR7TH2VLGc,7417
|
|
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=
|
|
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.
|
|
537
|
-
skypilot_nightly-1.0.0.
|
|
538
|
-
skypilot_nightly-1.0.0.
|
|
539
|
-
skypilot_nightly-1.0.0.
|
|
540
|
-
skypilot_nightly-1.0.0.
|
|
541
|
-
skypilot_nightly-1.0.0.
|
|
536
|
+
skypilot_nightly-1.0.0.dev20250823.dist-info/licenses/LICENSE,sha256=emRJAvE7ngL6x0RhQvlns5wJzGI3NEQ_WMjNmd9TZc4,12170
|
|
537
|
+
skypilot_nightly-1.0.0.dev20250823.dist-info/METADATA,sha256=mBLKdqZYDR4ZN5cDcDEvIo0_LAibuMi5EJvBHCW_gfI,20115
|
|
538
|
+
skypilot_nightly-1.0.0.dev20250823.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
539
|
+
skypilot_nightly-1.0.0.dev20250823.dist-info/entry_points.txt,sha256=StA6HYpuHj-Y61L2Ze-hK2IcLWgLZcML5gJu8cs6nU4,36
|
|
540
|
+
skypilot_nightly-1.0.0.dev20250823.dist-info/top_level.txt,sha256=qA8QuiNNb6Y1OF-pCUtPEr6sLEwy2xJX06Bd_CrtrHY,4
|
|
541
|
+
skypilot_nightly-1.0.0.dev20250823.dist-info/RECORD,,
|
/sky/dashboard/out/_next/static/{wN25tc2rkvOkO-qkzIhcD → UQeqZCi6L_itwVPDcn3ba}/_buildManifest.js
RENAMED
|
File without changes
|
/sky/dashboard/out/_next/static/{wN25tc2rkvOkO-qkzIhcD → UQeqZCi6L_itwVPDcn3ba}/_ssgManifest.js
RENAMED
|
File without changes
|
{skypilot_nightly-1.0.0.dev20250821.dist-info → skypilot_nightly-1.0.0.dev20250823.dist-info}/WHEEL
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|