skypilot-nightly 1.0.0.dev20251003__py3-none-any.whl → 1.0.0.dev20251005__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


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

Files changed (37) hide show
  1. sky/__init__.py +2 -2
  2. sky/backends/cloud_vm_ray_backend.py +42 -27
  3. sky/client/cli/command.py +1 -11
  4. sky/dashboard/out/404.html +1 -1
  5. sky/dashboard/out/clusters/[cluster]/[job].html +1 -1
  6. sky/dashboard/out/clusters/[cluster].html +1 -1
  7. sky/dashboard/out/clusters.html +1 -1
  8. sky/dashboard/out/config.html +1 -1
  9. sky/dashboard/out/index.html +1 -1
  10. sky/dashboard/out/infra/[context].html +1 -1
  11. sky/dashboard/out/infra.html +1 -1
  12. sky/dashboard/out/jobs/[job].html +1 -1
  13. sky/dashboard/out/jobs/pools/[pool].html +1 -1
  14. sky/dashboard/out/jobs.html +1 -1
  15. sky/dashboard/out/users.html +1 -1
  16. sky/dashboard/out/volumes.html +1 -1
  17. sky/dashboard/out/workspace/new.html +1 -1
  18. sky/dashboard/out/workspaces/[name].html +1 -1
  19. sky/dashboard/out/workspaces.html +1 -1
  20. sky/execution.py +24 -2
  21. sky/jobs/recovery_strategy.py +45 -0
  22. sky/provision/kubernetes/utils.py +118 -6
  23. sky/schemas/api/responses.py +2 -2
  24. sky/server/auth/loopback.py +38 -0
  25. sky/server/auth/oauth2_proxy.py +6 -0
  26. sky/server/server.py +6 -0
  27. sky/setup_files/dependencies.py +1 -0
  28. sky/skypilot_config.py +2 -1
  29. sky/utils/context.py +12 -7
  30. {skypilot_nightly-1.0.0.dev20251003.dist-info → skypilot_nightly-1.0.0.dev20251005.dist-info}/METADATA +37 -36
  31. {skypilot_nightly-1.0.0.dev20251003.dist-info → skypilot_nightly-1.0.0.dev20251005.dist-info}/RECORD +37 -36
  32. /sky/dashboard/out/_next/static/{Haazh5IQz6F8Wyiqxcaj8 → Vg53Kzbf7u4o6fYPeOHMe}/_buildManifest.js +0 -0
  33. /sky/dashboard/out/_next/static/{Haazh5IQz6F8Wyiqxcaj8 → Vg53Kzbf7u4o6fYPeOHMe}/_ssgManifest.js +0 -0
  34. {skypilot_nightly-1.0.0.dev20251003.dist-info → skypilot_nightly-1.0.0.dev20251005.dist-info}/WHEEL +0 -0
  35. {skypilot_nightly-1.0.0.dev20251003.dist-info → skypilot_nightly-1.0.0.dev20251005.dist-info}/entry_points.txt +0 -0
  36. {skypilot_nightly-1.0.0.dev20251003.dist-info → skypilot_nightly-1.0.0.dev20251005.dist-info}/licenses/LICENSE +0 -0
  37. {skypilot_nightly-1.0.0.dev20251003.dist-info → skypilot_nightly-1.0.0.dev20251005.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 = 'd9e8cda1c05e4d5e7135d47a4720d236c932e8d7'
10
+ _SKYPILOT_COMMIT_SHA = '4db6dccc63718d0342d70a736bfdb0ba84b6a4ad'
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.dev20251003'
40
+ __version__ = '1.0.0.dev20251005'
41
41
  __root_dir__ = directory_utils.get_sky_dir()
42
42
 
43
43
 
@@ -3277,6 +3277,10 @@ class CloudVmRayBackend(backends.Backend['CloudVmRayResourceHandle']):
3277
3277
  self._requested_features = set()
3278
3278
  self._dump_final_script = False
3279
3279
  self._is_managed = False
3280
+ # Optional planner (via register_info): used under the per-cluster lock
3281
+ # to produce a fresh concrete plan when neither a reusable snapshot nor
3282
+ # a caller plan is available.
3283
+ self._planner = None
3280
3284
 
3281
3285
  # Command for running the setup script. It is only set when the
3282
3286
  # setup needs to be run outside the self._setup() and as part of
@@ -3294,6 +3298,9 @@ class CloudVmRayBackend(backends.Backend['CloudVmRayResourceHandle']):
3294
3298
  self._requested_features)
3295
3299
  self._dump_final_script = kwargs.pop('dump_final_script', False)
3296
3300
  self._is_managed = kwargs.pop('is_managed', False)
3301
+ # Optional planner callback for a fresh plan under lock when no
3302
+ # reusable snapshot/caller plan exists. Keeps optimizer in upper layer.
3303
+ self._planner = kwargs.pop('planner', self._planner)
3297
3304
  assert not kwargs, f'Unexpected kwargs: {kwargs}'
3298
3305
 
3299
3306
  def check_resources_fit_cluster(
@@ -5843,33 +5850,41 @@ class CloudVmRayBackend(backends.Backend['CloudVmRayResourceHandle']):
5843
5850
  common_utils.check_cluster_name_is_valid(cluster_name)
5844
5851
 
5845
5852
  if to_provision is None:
5846
- # The cluster is recently terminated either by autostop or manually
5847
- # terminated on the cloud. We should use the previously terminated
5848
- # resources to provision the cluster.
5849
- #
5850
- # FIXME(zongheng): this assert can be hit by using two terminals.
5851
- # First, create a 'dbg' cluster. Then:
5852
- # Terminal 1: sky down dbg -y
5853
- # Terminal 2: sky launch -c dbg -- echo
5854
- # Run it in order. Terminal 2 will show this error after terminal 1
5855
- # succeeds in downing the cluster and releasing the lock.
5856
- assert isinstance(
5857
- handle_before_refresh, CloudVmRayResourceHandle), (
5858
- f'Trying to launch cluster {cluster_name!r} recently '
5859
- 'terminated on the cloud, but the handle is not a '
5860
- f'CloudVmRayResourceHandle ({handle_before_refresh}).')
5861
- status_before_refresh_str = None
5862
- if status_before_refresh is not None:
5863
- status_before_refresh_str = status_before_refresh.value
5864
-
5865
- logger.info(
5866
- f'The cluster {cluster_name!r} (status: '
5867
- f'{status_before_refresh_str}) was not found on the cloud: it '
5868
- 'may be autodowned, manually terminated, or its launch never '
5869
- 'succeeded. Provisioning a new cluster by using the same '
5870
- 'resources as its original launch.')
5871
- to_provision = handle_before_refresh.launched_resources
5872
- self.check_resources_fit_cluster(handle_before_refresh, task)
5853
+ # Recently terminated after refresh. OPTIMIZE usually ran outside
5854
+ # the lock, so that decision may be stale by now. Under the lock,
5855
+ # ensure we always have a concrete plan via the following order:
5856
+ # 1) Reuse last placement snapshot (if available);
5857
+ # 2) Else, call injected planner for a fresh plan.
5858
+ # If we still have a pre-refresh handle snapshot with a concrete
5859
+ # placement, prefer reusing it.
5860
+ if (isinstance(handle_before_refresh, CloudVmRayResourceHandle) and
5861
+ handle_before_refresh.launched_resources is not None):
5862
+ to_provision = handle_before_refresh.launched_resources
5863
+ # Ensure the requested task fits the previous placement.
5864
+ self.check_resources_fit_cluster(handle_before_refresh, task)
5865
+ # Mirror the original message for reuse path.
5866
+ status_before_refresh_str = None
5867
+ if status_before_refresh is not None:
5868
+ status_before_refresh_str = status_before_refresh.value
5869
+ logger.info(
5870
+ f'The cluster {cluster_name!r} (status: '
5871
+ f'{status_before_refresh_str}) was not found on the cloud: '
5872
+ 'it may be autodowned, manually terminated, or its launch '
5873
+ 'never succeeded. Provisioning a new cluster by using the '
5874
+ 'same resources as its original launch.')
5875
+ elif self._planner is not None:
5876
+ to_provision = self._planner(task)
5877
+ logger.info(
5878
+ 'Previous placement snapshot missing; computing a fresh '
5879
+ 'plan for provisioning.')
5880
+ else:
5881
+ # Without a snapshot or planner, we cannot proceed safely.
5882
+ # Surface a user-friendly error without a long traceback.
5883
+ with ux_utils.print_exception_no_traceback():
5884
+ raise RuntimeError(
5885
+ 'No concrete launch plan available after recent cloud '
5886
+ f'termination of cluster {cluster_name!r}. Ensure the '
5887
+ 'OPTIMIZE stage runs or provide concrete resources.')
5873
5888
 
5874
5889
  return RetryingVmProvisioner.ToProvisionConfig(
5875
5890
  cluster_name,
sky/client/cli/command.py CHANGED
@@ -1803,17 +1803,7 @@ def status(verbose: bool, refresh: bool, ip: bool, endpoints: bool,
1803
1803
  return None
1804
1804
 
1805
1805
  def submit_workspace() -> Optional[server_common.RequestId[Dict[str, Any]]]:
1806
- try:
1807
- return sdk.workspaces()
1808
- except RuntimeError:
1809
- # Backward compatibility for API server before #5660.
1810
- # TODO(zhwu): remove this after 0.10.0.
1811
- logger.warning(f'{colorama.Style.DIM}SkyPilot API server is '
1812
- 'in an old version, and may miss feature: '
1813
- 'workspaces. Update with: sky api stop; '
1814
- 'sky api start'
1815
- f'{colorama.Style.RESET_ALL}')
1816
- return None
1806
+ return sdk.workspaces()
1817
1807
 
1818
1808
  active_workspace = skypilot_config.get_active_workspace()
1819
1809
 
@@ -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-3286453d56f3c0a0.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/Haazh5IQz6F8Wyiqxcaj8/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/Haazh5IQz6F8Wyiqxcaj8/_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":"Haazh5IQz6F8Wyiqxcaj8","assetPrefix":"/dashboard","nextExport":true,"isFallback":false,"gip":true,"scriptLoader":[]}</script></body></html>
1
+ <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-3286453d56f3c0a0.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/Vg53Kzbf7u4o6fYPeOHMe/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/Vg53Kzbf7u4o6fYPeOHMe/_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":"Vg53Kzbf7u4o6fYPeOHMe","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-3286453d56f3c0a0.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-72794fc3fcdd517a.js" defer=""></script><script src="/dashboard/_next/static/Haazh5IQz6F8Wyiqxcaj8/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/Haazh5IQz6F8Wyiqxcaj8/_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":"Haazh5IQz6F8Wyiqxcaj8","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
1
+ <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-3286453d56f3c0a0.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-72794fc3fcdd517a.js" defer=""></script><script src="/dashboard/_next/static/Vg53Kzbf7u4o6fYPeOHMe/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/Vg53Kzbf7u4o6fYPeOHMe/_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":"Vg53Kzbf7u4o6fYPeOHMe","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-3286453d56f3c0a0.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-66237729cdf9749e.js" defer=""></script><script src="/dashboard/_next/static/chunks/6990-f6818c84ed8f1c86.js" defer=""></script><script src="/dashboard/_next/static/chunks/6135-4b4d5e824b7f9d3c.js" defer=""></script><script src="/dashboard/_next/static/chunks/1121-d0782b9251f0fcd3.js" defer=""></script><script src="/dashboard/_next/static/chunks/6856-5fdc9b851a18acdb.js" defer=""></script><script src="/dashboard/_next/static/chunks/6601-06114c982db410b6.js" defer=""></script><script src="/dashboard/_next/static/chunks/3015-8d748834fcc60b46.js" defer=""></script><script src="/dashboard/_next/static/chunks/9037-d0c00018a5ba198c.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/clusters/%5Bcluster%5D-e052384df65ef200.js" defer=""></script><script src="/dashboard/_next/static/Haazh5IQz6F8Wyiqxcaj8/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/Haazh5IQz6F8Wyiqxcaj8/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/clusters/[cluster]","query":{},"buildId":"Haazh5IQz6F8Wyiqxcaj8","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
1
+ <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-3286453d56f3c0a0.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-66237729cdf9749e.js" defer=""></script><script src="/dashboard/_next/static/chunks/6990-f6818c84ed8f1c86.js" defer=""></script><script src="/dashboard/_next/static/chunks/6135-4b4d5e824b7f9d3c.js" defer=""></script><script src="/dashboard/_next/static/chunks/1121-d0782b9251f0fcd3.js" defer=""></script><script src="/dashboard/_next/static/chunks/6856-5fdc9b851a18acdb.js" defer=""></script><script src="/dashboard/_next/static/chunks/6601-06114c982db410b6.js" defer=""></script><script src="/dashboard/_next/static/chunks/3015-8d748834fcc60b46.js" defer=""></script><script src="/dashboard/_next/static/chunks/9037-d0c00018a5ba198c.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/clusters/%5Bcluster%5D-e052384df65ef200.js" defer=""></script><script src="/dashboard/_next/static/Vg53Kzbf7u4o6fYPeOHMe/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/Vg53Kzbf7u4o6fYPeOHMe/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/clusters/[cluster]","query":{},"buildId":"Vg53Kzbf7u4o6fYPeOHMe","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-3286453d56f3c0a0.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/Haazh5IQz6F8Wyiqxcaj8/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/Haazh5IQz6F8Wyiqxcaj8/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/clusters","query":{},"buildId":"Haazh5IQz6F8Wyiqxcaj8","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
1
+ <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-3286453d56f3c0a0.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/Vg53Kzbf7u4o6fYPeOHMe/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/Vg53Kzbf7u4o6fYPeOHMe/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/clusters","query":{},"buildId":"Vg53Kzbf7u4o6fYPeOHMe","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-3286453d56f3c0a0.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/Haazh5IQz6F8Wyiqxcaj8/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/Haazh5IQz6F8Wyiqxcaj8/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/config","query":{},"buildId":"Haazh5IQz6F8Wyiqxcaj8","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
1
+ <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-3286453d56f3c0a0.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/Vg53Kzbf7u4o6fYPeOHMe/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/Vg53Kzbf7u4o6fYPeOHMe/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/config","query":{},"buildId":"Vg53Kzbf7u4o6fYPeOHMe","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-3286453d56f3c0a0.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/Haazh5IQz6F8Wyiqxcaj8/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/Haazh5IQz6F8Wyiqxcaj8/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/","query":{},"buildId":"Haazh5IQz6F8Wyiqxcaj8","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
1
+ <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-3286453d56f3c0a0.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/Vg53Kzbf7u4o6fYPeOHMe/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/Vg53Kzbf7u4o6fYPeOHMe/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/","query":{},"buildId":"Vg53Kzbf7u4o6fYPeOHMe","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-3286453d56f3c0a0.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-6563820e094f68ca.js" defer=""></script><script src="/dashboard/_next/static/Haazh5IQz6F8Wyiqxcaj8/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/Haazh5IQz6F8Wyiqxcaj8/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/infra/[context]","query":{},"buildId":"Haazh5IQz6F8Wyiqxcaj8","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
1
+ <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-3286453d56f3c0a0.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-6563820e094f68ca.js" defer=""></script><script src="/dashboard/_next/static/Vg53Kzbf7u4o6fYPeOHMe/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/Vg53Kzbf7u4o6fYPeOHMe/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/infra/[context]","query":{},"buildId":"Vg53Kzbf7u4o6fYPeOHMe","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-3286453d56f3c0a0.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-aabba60d57826e0f.js" defer=""></script><script src="/dashboard/_next/static/Haazh5IQz6F8Wyiqxcaj8/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/Haazh5IQz6F8Wyiqxcaj8/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/infra","query":{},"buildId":"Haazh5IQz6F8Wyiqxcaj8","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
1
+ <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-3286453d56f3c0a0.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-aabba60d57826e0f.js" defer=""></script><script src="/dashboard/_next/static/Vg53Kzbf7u4o6fYPeOHMe/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/Vg53Kzbf7u4o6fYPeOHMe/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/infra","query":{},"buildId":"Vg53Kzbf7u4o6fYPeOHMe","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-3286453d56f3c0a0.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-66237729cdf9749e.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/Haazh5IQz6F8Wyiqxcaj8/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/Haazh5IQz6F8Wyiqxcaj8/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/jobs/[job]","query":{},"buildId":"Haazh5IQz6F8Wyiqxcaj8","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
1
+ <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-3286453d56f3c0a0.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-66237729cdf9749e.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/Vg53Kzbf7u4o6fYPeOHMe/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/Vg53Kzbf7u4o6fYPeOHMe/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/jobs/[job]","query":{},"buildId":"Vg53Kzbf7u4o6fYPeOHMe","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-3286453d56f3c0a0.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-66237729cdf9749e.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/jobs/pools/%5Bpool%5D-509b2977a6373bf6.js" defer=""></script><script src="/dashboard/_next/static/Haazh5IQz6F8Wyiqxcaj8/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/Haazh5IQz6F8Wyiqxcaj8/_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":"Haazh5IQz6F8Wyiqxcaj8","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
1
+ <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-3286453d56f3c0a0.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-66237729cdf9749e.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/jobs/pools/%5Bpool%5D-509b2977a6373bf6.js" defer=""></script><script src="/dashboard/_next/static/Vg53Kzbf7u4o6fYPeOHMe/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/Vg53Kzbf7u4o6fYPeOHMe/_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":"Vg53Kzbf7u4o6fYPeOHMe","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-3286453d56f3c0a0.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-1f70d9faa564804f.js" defer=""></script><script src="/dashboard/_next/static/Haazh5IQz6F8Wyiqxcaj8/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/Haazh5IQz6F8Wyiqxcaj8/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/jobs","query":{},"buildId":"Haazh5IQz6F8Wyiqxcaj8","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
1
+ <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-3286453d56f3c0a0.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-1f70d9faa564804f.js" defer=""></script><script src="/dashboard/_next/static/Vg53Kzbf7u4o6fYPeOHMe/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/Vg53Kzbf7u4o6fYPeOHMe/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/jobs","query":{},"buildId":"Vg53Kzbf7u4o6fYPeOHMe","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-3286453d56f3c0a0.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/Haazh5IQz6F8Wyiqxcaj8/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/Haazh5IQz6F8Wyiqxcaj8/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/users","query":{},"buildId":"Haazh5IQz6F8Wyiqxcaj8","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
1
+ <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-3286453d56f3c0a0.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/Vg53Kzbf7u4o6fYPeOHMe/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/Vg53Kzbf7u4o6fYPeOHMe/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/users","query":{},"buildId":"Vg53Kzbf7u4o6fYPeOHMe","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-3286453d56f3c0a0.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/Haazh5IQz6F8Wyiqxcaj8/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/Haazh5IQz6F8Wyiqxcaj8/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/volumes","query":{},"buildId":"Haazh5IQz6F8Wyiqxcaj8","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
1
+ <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-3286453d56f3c0a0.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/Vg53Kzbf7u4o6fYPeOHMe/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/Vg53Kzbf7u4o6fYPeOHMe/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/volumes","query":{},"buildId":"Vg53Kzbf7u4o6fYPeOHMe","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-3286453d56f3c0a0.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/Haazh5IQz6F8Wyiqxcaj8/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/Haazh5IQz6F8Wyiqxcaj8/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/workspace/new","query":{},"buildId":"Haazh5IQz6F8Wyiqxcaj8","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
1
+ <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-3286453d56f3c0a0.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/Vg53Kzbf7u4o6fYPeOHMe/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/Vg53Kzbf7u4o6fYPeOHMe/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/workspace/new","query":{},"buildId":"Vg53Kzbf7u4o6fYPeOHMe","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-3286453d56f3c0a0.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/1836-37fede578e2da5f8.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-66237729cdf9749e.js" defer=""></script><script src="/dashboard/_next/static/chunks/6990-f6818c84ed8f1c86.js" defer=""></script><script src="/dashboard/_next/static/chunks/6135-4b4d5e824b7f9d3c.js" defer=""></script><script src="/dashboard/_next/static/chunks/1121-d0782b9251f0fcd3.js" defer=""></script><script src="/dashboard/_next/static/chunks/6601-06114c982db410b6.js" defer=""></script><script src="/dashboard/_next/static/chunks/3015-8d748834fcc60b46.js" defer=""></script><script src="/dashboard/_next/static/chunks/1141-159df2d4c441a9d1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/workspaces/%5Bname%5D-af76bb06dbb3954f.js" defer=""></script><script src="/dashboard/_next/static/Haazh5IQz6F8Wyiqxcaj8/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/Haazh5IQz6F8Wyiqxcaj8/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/workspaces/[name]","query":{},"buildId":"Haazh5IQz6F8Wyiqxcaj8","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
1
+ <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-3286453d56f3c0a0.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/1836-37fede578e2da5f8.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-66237729cdf9749e.js" defer=""></script><script src="/dashboard/_next/static/chunks/6990-f6818c84ed8f1c86.js" defer=""></script><script src="/dashboard/_next/static/chunks/6135-4b4d5e824b7f9d3c.js" defer=""></script><script src="/dashboard/_next/static/chunks/1121-d0782b9251f0fcd3.js" defer=""></script><script src="/dashboard/_next/static/chunks/6601-06114c982db410b6.js" defer=""></script><script src="/dashboard/_next/static/chunks/3015-8d748834fcc60b46.js" defer=""></script><script src="/dashboard/_next/static/chunks/1141-159df2d4c441a9d1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/workspaces/%5Bname%5D-af76bb06dbb3954f.js" defer=""></script><script src="/dashboard/_next/static/Vg53Kzbf7u4o6fYPeOHMe/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/Vg53Kzbf7u4o6fYPeOHMe/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/workspaces/[name]","query":{},"buildId":"Vg53Kzbf7u4o6fYPeOHMe","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-3286453d56f3c0a0.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-7528cc0ef8c522c5.js" defer=""></script><script src="/dashboard/_next/static/Haazh5IQz6F8Wyiqxcaj8/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/Haazh5IQz6F8Wyiqxcaj8/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/workspaces","query":{},"buildId":"Haazh5IQz6F8Wyiqxcaj8","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
1
+ <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-3286453d56f3c0a0.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-7528cc0ef8c522c5.js" defer=""></script><script src="/dashboard/_next/static/Vg53Kzbf7u4o6fYPeOHMe/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/Vg53Kzbf7u4o6fYPeOHMe/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/workspaces","query":{},"buildId":"Vg53Kzbf7u4o6fYPeOHMe","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
sky/execution.py CHANGED
@@ -5,7 +5,7 @@ See `Stage` for a Task's life cycle.
5
5
  import enum
6
6
  import logging
7
7
  import typing
8
- from typing import List, Optional, Tuple, Union
8
+ from typing import Callable, List, Optional, Tuple, Union
9
9
 
10
10
  import colorama
11
11
 
@@ -31,6 +31,7 @@ from sky.utils import ux_utils
31
31
 
32
32
  if typing.TYPE_CHECKING:
33
33
  import sky
34
+ from sky import resources as resources_lib
34
35
 
35
36
  logger = sky_logging.init_logger(__name__)
36
37
 
@@ -400,6 +401,26 @@ def _execute_dag(
400
401
  task = dag.tasks[0] # Keep: dag may have been deep-copied.
401
402
  assert task.best_resources is not None, task
402
403
 
404
+ # Note on race vs. lock: OPTIMIZE typically runs outside the per-cluster
405
+ # lock. After the backend acquires the lock and refreshes state, the
406
+ # original "do we need to optimize?" decision may be stale (e.g., the
407
+ # cluster just got terminated). To compensate without moving the optimizer
408
+ # into the backend, we inject a small planner the backend can call under
409
+ # the lock only when no reusable snapshot and no caller plan exist.
410
+ planner: Optional[Callable[['sky.Task'], 'resources_lib.Resources']] = None
411
+ if isinstance(backend,
412
+ backends.CloudVmRayBackend) and Stage.OPTIMIZE in stages:
413
+
414
+ def _planner(_t: 'sky.Task'):
415
+ new_dag = optimizer.Optimizer.optimize(dag,
416
+ minimize=optimize_target,
417
+ quiet=_quiet_optimizer)
418
+ new_task = new_dag.tasks[0]
419
+ assert new_task.best_resources is not None, new_task
420
+ return new_task.best_resources.assert_launchable()
421
+
422
+ planner = _planner
423
+
403
424
  backend.register_info(
404
425
  dag=dag,
405
426
  optimize_target=optimize_target,
@@ -408,7 +429,8 @@ def _execute_dag(
408
429
  # after K8S pod recovers from a crash.
409
430
  # See `kubernetes-ray.yml.j2` for more details.
410
431
  dump_final_script=is_controller_high_availability_supported,
411
- is_managed=is_managed)
432
+ is_managed=is_managed,
433
+ planner=planner)
412
434
 
413
435
  if task.storage_mounts is not None:
414
436
  # Optimizer should eventually choose where to store bucket
@@ -7,6 +7,7 @@ resources:
7
7
  """
8
8
  import asyncio
9
9
  import logging
10
+ import os
10
11
  import traceback
11
12
  import typing
12
13
  from typing import Optional, Set
@@ -16,16 +17,19 @@ from sky import dag as dag_lib
16
17
  from sky import exceptions
17
18
  from sky import global_user_state
18
19
  from sky import sky_logging
20
+ from sky import skypilot_config
19
21
  from sky.backends import backend_utils
20
22
  from sky.client import sdk
21
23
  from sky.jobs import scheduler
22
24
  from sky.jobs import state
23
25
  from sky.jobs import utils as managed_job_utils
24
26
  from sky.serve import serve_utils
27
+ from sky.skylet import constants
25
28
  from sky.skylet import job_lib
26
29
  from sky.usage import usage_lib
27
30
  from sky.utils import common_utils
28
31
  from sky.utils import context_utils
32
+ from sky.utils import env_options
29
33
  from sky.utils import registry
30
34
  from sky.utils import status_lib
31
35
  from sky.utils import ux_utils
@@ -45,6 +49,13 @@ MAX_JOB_CHECKING_RETRY = 10
45
49
  # cluster before its status can be updated by the job controller.
46
50
  _AUTODOWN_MINUTES = 10
47
51
 
52
+ ENV_VARS_TO_CLEAR = [
53
+ skypilot_config.ENV_VAR_SKYPILOT_CONFIG,
54
+ constants.USER_ID_ENV_VAR,
55
+ constants.USER_ENV_VAR,
56
+ env_options.Options.SHOW_DEBUG_INFO.env_key,
57
+ ]
58
+
48
59
 
49
60
  class StrategyExecutor:
50
61
  """Handle the launching, recovery and termination of managed job clusters"""
@@ -213,6 +224,7 @@ class StrategyExecutor:
213
224
  **kwargs,
214
225
  _try_cancel_if_cluster_is_init=True,
215
226
  )
227
+ self._logger.debug(f'sdk.cancel request ID: {request_id}')
216
228
  await context_utils.to_thread(
217
229
  sdk.get,
218
230
  request_id,
@@ -371,6 +383,31 @@ class StrategyExecutor:
371
383
  usage_lib.messages.usage.set_internal()
372
384
  if self.pool is None:
373
385
  assert self.cluster_name is not None
386
+
387
+ # sdk.launch will implicitly start the API server,
388
+ # but then the API server will inherit the current
389
+ # env vars/user, which we may not want.
390
+ # Instead, clear env vars here and call api_start
391
+ # explicitly.
392
+ vars_to_restore = {}
393
+ try:
394
+ for env_var in ENV_VARS_TO_CLEAR:
395
+ vars_to_restore[env_var] = os.environ.pop(
396
+ env_var, None)
397
+ self._logger.debug('Cleared env var: '
398
+ f'{env_var}')
399
+ self._logger.debug('Env vars for api_start: '
400
+ f'{os.environ}')
401
+ await context_utils.to_thread(sdk.api_start)
402
+ self._logger.info('API server started.')
403
+ finally:
404
+ for env_var, value in vars_to_restore.items():
405
+ if value is not None:
406
+ self._logger.debug(
407
+ 'Restored env var: '
408
+ f'{env_var}: {value}')
409
+ os.environ[env_var] = value
410
+
374
411
  log_file = _get_logger_file(self._logger)
375
412
  request_id = None
376
413
  try:
@@ -392,6 +429,8 @@ class StrategyExecutor:
392
429
  # down=True,
393
430
  _is_launched_by_jobs_controller=True,
394
431
  )
432
+ self._logger.debug('sdk.launch request ID: '
433
+ f'{request_id}')
395
434
  if log_file is None:
396
435
  raise OSError('Log file is None')
397
436
  with open(log_file, 'a', encoding='utf-8') as f:
@@ -404,6 +443,8 @@ class StrategyExecutor:
404
443
  if request_id:
405
444
  req = await context_utils.to_thread(
406
445
  sdk.api_cancel, request_id)
446
+ self._logger.debug('sdk.api_cancel request '
447
+ f'ID: {req}')
407
448
  try:
408
449
  await context_utils.to_thread(
409
450
  sdk.get, req)
@@ -427,6 +468,8 @@ class StrategyExecutor:
427
468
  self.dag,
428
469
  cluster_name=self.cluster_name,
429
470
  )
471
+ self._logger.debug('sdk.exec request ID: '
472
+ f'{request_id}')
430
473
  job_id_on_pool_cluster, _ = (
431
474
  await context_utils.to_thread(
432
475
  sdk.get, request_id))
@@ -434,6 +477,8 @@ class StrategyExecutor:
434
477
  if request_id:
435
478
  req = await context_utils.to_thread(
436
479
  sdk.api_cancel, request_id)
480
+ self._logger.debug('sdk.api_cancel request '
481
+ f'ID: {req}')
437
482
  try:
438
483
  await context_utils.to_thread(
439
484
  sdk.get, req)
@@ -16,6 +16,8 @@ import time
16
16
  import typing
17
17
  from typing import Any, Callable, Dict, List, Optional, Set, Tuple, Union
18
18
 
19
+ import ijson
20
+
19
21
  from sky import clouds
20
22
  from sky import exceptions
21
23
  from sky import global_user_state
@@ -60,6 +62,8 @@ HIGH_AVAILABILITY_DEPLOYMENT_VOLUME_MOUNT_NAME = 'sky-data'
60
62
  # and store all data that needs to be persisted in future.
61
63
  HIGH_AVAILABILITY_DEPLOYMENT_VOLUME_MOUNT_PATH = '/home/sky'
62
64
 
65
+ IJSON_BUFFER_SIZE = 64 * 1024 # 64KB, default from ijson
66
+
63
67
 
64
68
  class KubernetesHighPerformanceNetworkType(enum.Enum):
65
69
  """Enum for different Kubernetes cluster types with high performance
@@ -1141,9 +1145,51 @@ def detect_accelerator_resource(
1141
1145
  return has_accelerator, cluster_resources
1142
1146
 
1143
1147
 
1148
+ @dataclasses.dataclass
1149
+ class V1ObjectMeta:
1150
+ name: str
1151
+ labels: Dict[str, str]
1152
+ namespace: str = '' # Used for pods, not nodes
1153
+
1154
+
1155
+ @dataclasses.dataclass
1156
+ class V1NodeAddress:
1157
+ type: str
1158
+ address: str
1159
+
1160
+
1161
+ @dataclasses.dataclass
1162
+ class V1NodeStatus:
1163
+ allocatable: Dict[str, str]
1164
+ capacity: Dict[str, str]
1165
+ addresses: List[V1NodeAddress]
1166
+
1167
+
1168
+ @dataclasses.dataclass
1169
+ class V1Node:
1170
+ metadata: V1ObjectMeta
1171
+ status: V1NodeStatus
1172
+
1173
+ @classmethod
1174
+ def from_dict(cls, data: dict) -> 'V1Node':
1175
+ """Create V1Node from a dictionary."""
1176
+ return cls(metadata=V1ObjectMeta(
1177
+ name=data['metadata']['name'],
1178
+ labels=data['metadata'].get('labels', {}),
1179
+ ),
1180
+ status=V1NodeStatus(
1181
+ allocatable=data['status']['allocatable'],
1182
+ capacity=data['status']['capacity'],
1183
+ addresses=[
1184
+ V1NodeAddress(type=addr['type'],
1185
+ address=addr['address'])
1186
+ for addr in data['status'].get('addresses', [])
1187
+ ]))
1188
+
1189
+
1144
1190
  @annotations.lru_cache(scope='request', maxsize=10)
1145
1191
  @_retry_on_error(resource_type='node')
1146
- def get_kubernetes_nodes(*, context: Optional[str] = None) -> List[Any]:
1192
+ def get_kubernetes_nodes(*, context: Optional[str] = None) -> List[V1Node]:
1147
1193
  """Gets the kubernetes nodes in the context.
1148
1194
 
1149
1195
  If context is None, gets the nodes in the current context.
@@ -1151,15 +1197,71 @@ def get_kubernetes_nodes(*, context: Optional[str] = None) -> List[Any]:
1151
1197
  if context is None:
1152
1198
  context = get_current_kube_config_context_name()
1153
1199
 
1154
- nodes = kubernetes.core_api(context).list_node(
1155
- _request_timeout=kubernetes.API_TIMEOUT).items
1200
+ # Return raw urllib3.HTTPResponse object so that we can parse the json
1201
+ # more efficiently.
1202
+ response = kubernetes.core_api(context).list_node(
1203
+ _request_timeout=kubernetes.API_TIMEOUT, _preload_content=False)
1204
+ try:
1205
+ nodes = [
1206
+ V1Node.from_dict(item_dict) for item_dict in ijson.items(
1207
+ response, 'items.item', buf_size=IJSON_BUFFER_SIZE)
1208
+ ]
1209
+ finally:
1210
+ response.release_conn()
1211
+
1156
1212
  return nodes
1157
1213
 
1158
1214
 
1215
+ @dataclasses.dataclass
1216
+ class V1PodStatus:
1217
+ phase: str
1218
+
1219
+
1220
+ @dataclasses.dataclass
1221
+ class V1ResourceRequirements:
1222
+ requests: Optional[Dict[str, str]]
1223
+
1224
+
1225
+ @dataclasses.dataclass
1226
+ class V1Container:
1227
+ resources: V1ResourceRequirements
1228
+
1229
+
1230
+ @dataclasses.dataclass
1231
+ class V1PodSpec:
1232
+ containers: List[V1Container]
1233
+ node_name: Optional[str]
1234
+
1235
+
1236
+ @dataclasses.dataclass
1237
+ class V1Pod:
1238
+ metadata: V1ObjectMeta
1239
+ status: V1PodStatus
1240
+ spec: V1PodSpec
1241
+
1242
+ @classmethod
1243
+ def from_dict(cls, data: dict) -> 'V1Pod':
1244
+ """Create V1Pod from a dictionary."""
1245
+ return cls(metadata=V1ObjectMeta(
1246
+ name=data['metadata']['name'],
1247
+ labels=data['metadata'].get('labels', {}),
1248
+ namespace=data['metadata'].get('namespace'),
1249
+ ),
1250
+ status=V1PodStatus(phase=data['status'].get('phase'),),
1251
+ spec=V1PodSpec(
1252
+ node_name=data['spec'].get('nodeName'),
1253
+ containers=[
1254
+ V1Container(resources=V1ResourceRequirements(
1255
+ requests=container.get('resources', {}).get(
1256
+ 'requests') or None))
1257
+ for container in data['spec'].get('containers', [])
1258
+ ]))
1259
+
1260
+
1159
1261
  @_retry_on_error(resource_type='pod')
1160
1262
  def get_all_pods_in_kubernetes_cluster(*,
1161
1263
  context: Optional[str] = None
1162
- ) -> List[Any]:
1264
+ ) -> List[V1Pod]:
1163
1265
  """Gets pods in all namespaces in kubernetes cluster indicated by context.
1164
1266
 
1165
1267
  Used for computing cluster resource usage.
@@ -1167,8 +1269,18 @@ def get_all_pods_in_kubernetes_cluster(*,
1167
1269
  if context is None:
1168
1270
  context = get_current_kube_config_context_name()
1169
1271
 
1170
- pods = kubernetes.core_api(context).list_pod_for_all_namespaces(
1171
- _request_timeout=kubernetes.API_TIMEOUT).items
1272
+ # Return raw urllib3.HTTPResponse object so that we can parse the json
1273
+ # more efficiently.
1274
+ response = kubernetes.core_api(context).list_pod_for_all_namespaces(
1275
+ _request_timeout=kubernetes.API_TIMEOUT, _preload_content=False)
1276
+ try:
1277
+ pods = [
1278
+ V1Pod.from_dict(item_dict) for item_dict in ijson.items(
1279
+ response, 'items.item', buf_size=IJSON_BUFFER_SIZE)
1280
+ ]
1281
+ finally:
1282
+ response.release_conn()
1283
+
1172
1284
  return pods
1173
1285
 
1174
1286
 
@@ -206,9 +206,9 @@ class VolumeRecord(ResponseBaseModel):
206
206
  type: str
207
207
  launched_at: int
208
208
  cloud: str
209
- region: str
209
+ region: Optional[str] = None
210
210
  zone: Optional[str] = None
211
- size: str
211
+ size: Optional[str] = None
212
212
  config: Dict[str, Any]
213
213
  name_on_cloud: str
214
214
  user_hash: str
@@ -0,0 +1,38 @@
1
+ """Shared loopback detection utilities for auth middlewares."""
2
+
3
+ import ipaddress
4
+
5
+ import fastapi
6
+
7
+ from sky import sky_logging
8
+
9
+ logger = sky_logging.init_logger(__name__)
10
+
11
+ COMMON_PROXY_HEADERS = [
12
+ 'X-Forwarded-For', 'Forwarded', 'X-Real-IP', 'X-Client-IP',
13
+ 'X-Forwarded-Host', 'X-Forwarded-Proto'
14
+ ]
15
+
16
+
17
+ def _is_loopback_ip(ip_str: str) -> bool:
18
+ """Check if an IP address is a loopback address."""
19
+ try:
20
+ ip = ipaddress.ip_address(ip_str)
21
+ return ip.is_loopback
22
+ except ValueError:
23
+ return False
24
+
25
+
26
+ def is_loopback_request(request: fastapi.Request) -> bool:
27
+ """Determine if a request is coming from localhost."""
28
+ if request.client is None:
29
+ return False
30
+
31
+ client_host = request.client.host
32
+ if client_host == 'localhost' or _is_loopback_ip(client_host):
33
+ # Additional checks: ensure no forwarding headers are present.
34
+ # If there are any, assume this traffic went through a proxy.
35
+ return not any(
36
+ request.headers.get(header) for header in COMMON_PROXY_HEADERS)
37
+
38
+ return False
@@ -15,7 +15,9 @@ import starlette.middleware.base
15
15
  from sky import global_user_state
16
16
  from sky import models
17
17
  from sky import sky_logging
18
+ from sky.jobs import utils as managed_job_utils
18
19
  from sky.server.auth import authn
20
+ from sky.server.auth import loopback
19
21
  from sky.users import permission
20
22
  from sky.utils import common_utils
21
23
 
@@ -108,6 +110,10 @@ class OAuth2ProxyMiddleware(starlette.middleware.base.BaseHTTPMiddleware):
108
110
  # Already authenticated
109
111
  return await call_next(request)
110
112
 
113
+ if managed_job_utils.is_consolidation_mode(
114
+ ) and loopback.is_loopback_request(request):
115
+ return await call_next(request)
116
+
111
117
  async with aiohttp.ClientSession() as session:
112
118
  try:
113
119
  return await self._authenticate(request, call_next, session)
sky/server/server.py CHANGED
@@ -38,6 +38,7 @@ from sky import global_user_state
38
38
  from sky import models
39
39
  from sky import sky_logging
40
40
  from sky.data import storage_utils
41
+ from sky.jobs import utils as managed_job_utils
41
42
  from sky.jobs.server import server as jobs_rest
42
43
  from sky.metrics import utils as metrics_utils
43
44
  from sky.provision.kubernetes import utils as kubernetes_utils
@@ -52,6 +53,7 @@ from sky.server import state
52
53
  from sky.server import stream_utils
53
54
  from sky.server import versions
54
55
  from sky.server.auth import authn
56
+ from sky.server.auth import loopback
55
57
  from sky.server.auth import oauth2_proxy
56
58
  from sky.server.requests import executor
57
59
  from sky.server.requests import payloads
@@ -191,6 +193,10 @@ class BasicAuthMiddleware(starlette.middleware.base.BaseHTTPMiddleware):
191
193
  """Middleware to handle HTTP Basic Auth."""
192
194
 
193
195
  async def dispatch(self, request: fastapi.Request, call_next):
196
+ if managed_job_utils.is_consolidation_mode(
197
+ ) and loopback.is_loopback_request(request):
198
+ return await call_next(request)
199
+
194
200
  if request.url.path.startswith('/api/health'):
195
201
  # Try to set the auth user from basic auth
196
202
  _try_set_basic_auth_user(request)
@@ -48,6 +48,7 @@ install_requires = [
48
48
  # (https://github.com/yaml/pyyaml/issues/601)
49
49
  # <= 3.13 may encounter https://github.com/ultralytics/yolov5/issues/414
50
50
  'pyyaml > 3.13, != 5.4.*',
51
+ 'ijson',
51
52
  'requests',
52
53
  # SkyPilot inherits from uvicorn.Server to customize the behavior of
53
54
  # uvicorn, so we need to pin uvicorn version to avoid potential break
sky/skypilot_config.py CHANGED
@@ -825,7 +825,8 @@ def _compose_cli_config(cli_config: Optional[List[str]]) -> config_utils.Config:
825
825
  except ValueError as e:
826
826
  raise ValueError(f'Invalid config override: {cli_config}. '
827
827
  f'Check if config file exists or if the dotlist '
828
- f'is formatted as: key1=value1,key2=value2') from e
828
+ f'is formatted as: key1=value1,key2=value2.\n'
829
+ f'Details: {e}') from e
829
830
  logger.debug('CLI overrides config syntax check passed.')
830
831
 
831
832
  return parsed_config
sky/utils/context.py CHANGED
@@ -205,7 +205,8 @@ class ContextualEnviron(MutableMapping[str, str]):
205
205
  for key, value in ctx.env_overrides.items():
206
206
  if value is None:
207
207
  deleted_keys.add(key)
208
- yield key
208
+ else:
209
+ yield key
209
210
  for key in self._environ:
210
211
  # Deduplicate the keys
211
212
  if key not in ctx.env_overrides and key not in deleted_keys:
@@ -230,13 +231,17 @@ class ContextualEnviron(MutableMapping[str, str]):
230
231
  def __delitem__(self, key: str) -> None:
231
232
  ctx = get()
232
233
  if ctx is not None:
233
- if key in ctx.env_overrides:
234
- del ctx.env_overrides[key]
235
- elif key in self._environ:
236
- # If the key is not set in the context but set in the environ
237
- # of the process, we mark it as deleted in the context by
238
- # setting the value to None.
234
+ if key in self._environ:
235
+ # If the key is set in the environ of the process, we mark it as
236
+ # deleted in the context by setting the value to None.
237
+ # Note: we must do this even if it was also set in the context,
238
+ # since it could be set in both, and deleting should delete it
239
+ # from both.
239
240
  ctx.env_overrides[key] = None
241
+ elif key in ctx.env_overrides:
242
+ # If the key is set in the context, but not the original
243
+ # environ, we can just delete the override.
244
+ del ctx.env_overrides[key]
240
245
  else:
241
246
  # The key is not set in the context nor the process.
242
247
  raise KeyError(key)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: skypilot-nightly
3
- Version: 1.0.0.dev20251003
3
+ Version: 1.0.0.dev20251005
4
4
  Summary: SkyPilot: Run AI on Any Infra — Unified, Faster, Cheaper.
5
5
  Author: SkyPilot Team
6
6
  License: Apache 2.0
@@ -43,6 +43,7 @@ Requires-Dist: packaging
43
43
  Requires-Dist: psutil
44
44
  Requires-Dist: pulp
45
45
  Requires-Dist: pyyaml!=5.4.*,>3.13
46
+ Requires-Dist: ijson
46
47
  Requires-Dist: requests
47
48
  Requires-Dist: uvicorn[standard]<0.36.0,>=0.33.0
48
49
  Requires-Dist: fastapi
@@ -154,51 +155,51 @@ Requires-Dist: protobuf<7.0.0,>=5.26.1; extra == "server"
154
155
  Requires-Dist: aiosqlite; extra == "server"
155
156
  Requires-Dist: greenlet; extra == "server"
156
157
  Provides-Extra: all
157
- Requires-Dist: msrestazure; extra == "all"
158
- Requires-Dist: colorama<0.4.5; extra == "all"
159
- Requires-Dist: python-dateutil; extra == "all"
160
- Requires-Dist: azure-mgmt-compute>=33.0.0; extra == "all"
161
- Requires-Dist: aiosqlite; extra == "all"
162
- Requires-Dist: aiohttp; extra == "all"
158
+ Requires-Dist: azure-identity>=1.19.0; extra == "all"
159
+ Requires-Dist: passlib; extra == "all"
160
+ Requires-Dist: tomli; python_version < "3.11" and extra == "all"
163
161
  Requires-Dist: azure-mgmt-network>=27.0.0; extra == "all"
164
- Requires-Dist: ibm-cos-sdk; extra == "all"
165
- Requires-Dist: protobuf<7.0.0,>=5.26.1; extra == "all"
166
- Requires-Dist: botocore>=1.29.10; extra == "all"
162
+ Requires-Dist: python-dateutil; extra == "all"
163
+ Requires-Dist: kubernetes!=32.0.0,>=20.0.0; extra == "all"
167
164
  Requires-Dist: nebius>=0.2.47; extra == "all"
168
- Requires-Dist: msgraph-sdk; extra == "all"
165
+ Requires-Dist: azure-cli>=2.65.0; extra == "all"
166
+ Requires-Dist: pyvmomi==8.0.1.0.2; extra == "all"
167
+ Requires-Dist: websockets; extra == "all"
168
+ Requires-Dist: sqlalchemy_adapter; extra == "all"
169
+ Requires-Dist: vastai-sdk>=0.1.12; extra == "all"
170
+ Requires-Dist: protobuf<7.0.0,>=5.26.1; extra == "all"
171
+ Requires-Dist: google-api-python-client>=2.69.0; extra == "all"
172
+ Requires-Dist: colorama<0.4.5; extra == "all"
173
+ Requires-Dist: ibm-platform-services>=0.48.0; extra == "all"
169
174
  Requires-Dist: azure-core>=1.24.0; extra == "all"
175
+ Requires-Dist: msrestazure; extra == "all"
170
176
  Requires-Dist: pyopenssl<24.3.0,>=23.2.0; extra == "all"
171
- Requires-Dist: pydo>=0.3.0; extra == "all"
172
- Requires-Dist: azure-common; extra == "all"
173
- Requires-Dist: google-api-python-client>=2.69.0; extra == "all"
174
- Requires-Dist: greenlet; extra == "all"
177
+ Requires-Dist: boto3>=1.26.1; extra == "all"
178
+ Requires-Dist: ibm-cloud-sdk-core; extra == "all"
175
179
  Requires-Dist: pyjwt; extra == "all"
176
- Requires-Dist: casbin; extra == "all"
177
- Requires-Dist: oci; extra == "all"
178
180
  Requires-Dist: ibm-vpc; extra == "all"
179
- Requires-Dist: boto3>=1.26.1; extra == "all"
180
- Requires-Dist: grpcio>=1.63.0; extra == "all"
181
+ Requires-Dist: cudo-compute>=0.1.10; extra == "all"
181
182
  Requires-Dist: azure-core>=1.31.0; extra == "all"
183
+ Requires-Dist: oci; extra == "all"
184
+ Requires-Dist: grpcio>=1.63.0; extra == "all"
185
+ Requires-Dist: msgraph-sdk; extra == "all"
186
+ Requires-Dist: botocore>=1.29.10; extra == "all"
187
+ Requires-Dist: azure-mgmt-compute>=33.0.0; extra == "all"
182
188
  Requires-Dist: docker; extra == "all"
183
- Requires-Dist: anyio; extra == "all"
184
- Requires-Dist: azure-storage-blob>=12.23.1; extra == "all"
185
- Requires-Dist: pyvmomi==8.0.1.0.2; extra == "all"
186
- Requires-Dist: google-cloud-storage; extra == "all"
187
- Requires-Dist: awscli>=1.27.10; extra == "all"
188
- Requires-Dist: kubernetes!=32.0.0,>=20.0.0; extra == "all"
189
- Requires-Dist: websockets; extra == "all"
190
- Requires-Dist: ibm-platform-services>=0.48.0; extra == "all"
191
- Requires-Dist: vastai-sdk>=0.1.12; extra == "all"
192
- Requires-Dist: azure-identity>=1.19.0; extra == "all"
193
- Requires-Dist: tomli; python_version < "3.11" and extra == "all"
194
- Requires-Dist: passlib; extra == "all"
195
- Requires-Dist: ray[default]>=2.6.1; extra == "all"
189
+ Requires-Dist: greenlet; extra == "all"
196
190
  Requires-Dist: runpod>=1.6.1; extra == "all"
191
+ Requires-Dist: ibm-cos-sdk; extra == "all"
192
+ Requires-Dist: pydo>=0.3.0; extra == "all"
193
+ Requires-Dist: google-cloud-storage; extra == "all"
194
+ Requires-Dist: azure-storage-blob>=12.23.1; extra == "all"
197
195
  Requires-Dist: ecsapi>=0.2.0; extra == "all"
198
- Requires-Dist: sqlalchemy_adapter; extra == "all"
199
- Requires-Dist: azure-cli>=2.65.0; extra == "all"
200
- Requires-Dist: cudo-compute>=0.1.10; extra == "all"
201
- Requires-Dist: ibm-cloud-sdk-core; extra == "all"
196
+ Requires-Dist: casbin; extra == "all"
197
+ Requires-Dist: aiosqlite; extra == "all"
198
+ Requires-Dist: azure-common; extra == "all"
199
+ Requires-Dist: anyio; extra == "all"
200
+ Requires-Dist: ray[default]>=2.6.1; extra == "all"
201
+ Requires-Dist: awscli>=1.27.10; extra == "all"
202
+ Requires-Dist: aiohttp; extra == "all"
202
203
  Dynamic: author
203
204
  Dynamic: classifier
204
205
  Dynamic: description
@@ -1,4 +1,4 @@
1
- sky/__init__.py,sha256=GCvTnv2QS6fnUU2o38W-I3AawMA1gnbjOY6YduujLsQ,6713
1
+ sky/__init__.py,sha256=-liJiFNd12nilr-QQbOjiPe58Sk_SyvCzxvFThW-CNw,6713
2
2
  sky/admin_policy.py,sha256=XdcJnYqmude-LGGop-8U-FeiJcqtfYsYtIy4rmoCJnM,9799
3
3
  sky/authentication.py,sha256=P-bysZXiM4SBEnTcU-UqYoKSTX7Ylyij0DlitlCFBD8,24223
4
4
  sky/check.py,sha256=hBDTkiADC3HFfO6brZV819FVWcdOs3aiuhB6x6mY4Q4,29728
@@ -7,14 +7,14 @@ sky/cloud_stores.py,sha256=Ln5GBpel-sEs7rVx7bBrMkfLwA_bctI05Rox2uoz7Lo,26388
7
7
  sky/core.py,sha256=VTHly9kJmwtmdiKwkrSrzuJ_8V8t-aI9weADd0SqDWA,58305
8
8
  sky/dag.py,sha256=0ZpAEDXuIFo1SP7YJpF9vXiFxpRwqP8od-UXMg95td8,3929
9
9
  sky/exceptions.py,sha256=IprWNwo6z5cHE-vTuQ5bMcjCfE2kgwZ3PRuawLPucXY,20466
10
- sky/execution.py,sha256=1DtEne4EXROfnHKq6rrin69jtXvBmtRvrP7FUXBQCbk,35086
10
+ sky/execution.py,sha256=fC5cX9ooO0aOLwUnIciWRxFH4xvpkVYqssrUaPVRU2M,36247
11
11
  sky/global_user_state.py,sha256=-niIwLLe_hQYb3OvWYbkGLtyrvoYx16HMVeFR6IYnZs,103080
12
12
  sky/models.py,sha256=ZKisLai7vqUr6_BPev6Oziu5N23WLzTh9nRtHSlRchw,3999
13
13
  sky/optimizer.py,sha256=iR57bL_8BeG6bh1sH3J6n6i65EBFjmyftezYM4nnDZA,64150
14
14
  sky/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
15
15
  sky/resources.py,sha256=jojeuFmMEi-_7MJtR1i8SoEoUG89FrFHoZk1NQx7DzA,107795
16
16
  sky/sky_logging.py,sha256=BQtgSnt-4TLeMLLoxhk9jE7JCnXGko1cTim9ouuefAY,9755
17
- sky/skypilot_config.py,sha256=h0lCf0NC3ml19S4_Oc52w7QLEyzFgejFQAoLbVOydO4,37594
17
+ sky/skypilot_config.py,sha256=NC9uunXjiezV7hKj7fH4mz79A7H3tRkZe5Jda6cvXOw,37638
18
18
  sky/task.py,sha256=KcrfY3Rp1q3LzfMYJSPbRXpxJ7Ol9E9UBq56EixOQfQ,78707
19
19
  sky/adaptors/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
20
20
  sky/adaptors/aws.py,sha256=4caUTO5nxZQyDVPyQdoPljaF-Lz_Fa6NEnu3FfmLZd4,8633
@@ -38,7 +38,7 @@ sky/adaptors/vsphere.py,sha256=zJP9SeObEoLrpgHW2VHvZE48EhgVf8GfAEIwBeaDMfM,2129
38
38
  sky/backends/__init__.py,sha256=l1xXpkzPFMma0ZkT4GzVMu7uvgS3AsECg6zLc0S3JHQ,702
39
39
  sky/backends/backend.py,sha256=6bvW1K1hVgxWiD4B8NiBD8OJ9ihfEdhyY5p60-3aQf4,8433
40
40
  sky/backends/backend_utils.py,sha256=qbewVFNHQlinc4Wvn6ewocv3nash0X6RuDPOgyLXvFY,177499
41
- sky/backends/cloud_vm_ray_backend.py,sha256=yYkC5keYQ1y55hjhnV59VrLd0zF8jVamFEWkV5km3u4,306949
41
+ sky/backends/cloud_vm_ray_backend.py,sha256=ljDqA_gaLJbRGn-5IVG8ZHwoRVf18usnNZQ60H8abXY,308039
42
42
  sky/backends/docker_utils.py,sha256=_EhM6NStZDAwcegppQqExaB5iuSn1qL4xFFUqXAz2Uk,8392
43
43
  sky/backends/local_docker_backend.py,sha256=EyLYwJSihhOEOwpgzXVtykjByEJuZOrqEr9N0cta3k4,17563
44
44
  sky/backends/wheel_utils.py,sha256=DE71Muq5qLRhGpCVg1Rb6YOI7S_BzT8Hak27Pz8L4yw,12486
@@ -87,7 +87,7 @@ sky/client/sdk.py,sha256=IwdheaffnHmmjEDzvqhrDuH8jPBlCYMrBjLYa4RL2O0,107259
87
87
  sky/client/sdk_async.py,sha256=8G_E9Dn4d80rV-wxRH4zZUXZGAm6rLw3C8PI07fXwwQ,31106
88
88
  sky/client/service_account_auth.py,sha256=5jXk0G6ufuW-SHCO7BEHQeTO0_2a8KfFmA63auXFRj4,1529
89
89
  sky/client/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
90
- sky/client/cli/command.py,sha256=FBYtW17BNPNBHRipWsBMrzeKj8OCxM-A6QN2msaZq7o,250804
90
+ sky/client/cli/command.py,sha256=d5KNHUG6ej8GwQb89WqiRi6T61FXdI6Rt-ovA-Z3CI0,250301
91
91
  sky/client/cli/deprecation_utils.py,sha256=H_d5UyF2CekEoThduAzt5cihBO8hwKYMu0-Wqfbjv5E,3370
92
92
  sky/client/cli/flags.py,sha256=lLXHooU4HEslbHJuGAiCrKYkJZx99hAKaJbstw7s1bc,12136
93
93
  sky/client/cli/table_utils.py,sha256=HT_y__9_tZLKJ0aJu-hh67cu3NXfWDoiHir5fTmWaDw,10156
@@ -119,19 +119,19 @@ sky/clouds/utils/azure_utils.py,sha256=NToRBnhEyuUvb-nBnsKTxjhOBRkMcrelL8LK4w6s4
119
119
  sky/clouds/utils/gcp_utils.py,sha256=09MF4Vx0EW7S-GXGpyxpl2aQlHrqeu9ioV0nyionAyk,9890
120
120
  sky/clouds/utils/oci_utils.py,sha256=TFqAqRLggg4Z0bhxrrq8nouSSomZy-ub1frHXEkud2M,7302
121
121
  sky/clouds/utils/scp_utils.py,sha256=VGuccVO5uFGr8-yolWSoYrgr11z6cIeDBGcqkBzAyOs,18409
122
- sky/dashboard/out/404.html,sha256=wnH7jys75sCVkZdAY2Y7ZTb3aM5cQJ09CYIXkFwZM0k,1423
123
- sky/dashboard/out/clusters.html,sha256=R6bCIr2Xs1Na_F_5XjfFOCIWPq2G8d1Ol_z1sViZT3k,1418
124
- sky/dashboard/out/config.html,sha256=n2CC_g9LD7oKbKSptzMvNGYWRaCZQqg5sFHC6jNJv6Q,1414
122
+ sky/dashboard/out/404.html,sha256=MycaUpVzKWkF4hftENs0R6mfYT_QLtvxVe9Niuh7AN8,1423
123
+ sky/dashboard/out/clusters.html,sha256=6zMTQmyFuCc6AJoNzixjncpN5hg-EzSmL4ZOIGLYBNw,1418
124
+ sky/dashboard/out/config.html,sha256=6XSKZINuel_DKOXYnP3397xBi7XaDctW3YtXK_aeDIk,1414
125
125
  sky/dashboard/out/favicon.ico,sha256=XilUZZglAl_1zRsg85QsbQgmQAzGPQjcUIJ-A3AzYn8,93590
126
- sky/dashboard/out/index.html,sha256=t2pDePeUX1ts6pxz3jL61HdFQYkf4QAPE6XaDX0aVHg,1407
127
- sky/dashboard/out/infra.html,sha256=nVqIbit-tvw6INPAfUYrLqaEiHdRsZmqr7G4VMxc2NM,1412
128
- sky/dashboard/out/jobs.html,sha256=9Of-RZfjkVMFwB2Ei68_P3GY3etyhBa5vBsmEFWfzZI,1410
126
+ sky/dashboard/out/index.html,sha256=tT0ailNbGjYLxR-It6X-MNY_fqgzZacvTfUzJxxw1fQ,1407
127
+ sky/dashboard/out/infra.html,sha256=JhI1PPpj5hNpRLec5qK_2irsGjUnsrldr_8Jxaje5Ew,1412
128
+ sky/dashboard/out/jobs.html,sha256=oKSGTBOuTY2WDnGhUcCj8DTC7hchlbR0sRl_gMdhFx0,1410
129
129
  sky/dashboard/out/skypilot.svg,sha256=c0iRtlfLlaUm2p0rG9NFmo5FN0Qhf3pq5Xph-AeMPJw,5064
130
- sky/dashboard/out/users.html,sha256=V9YqrMGHifO7tEYdEGn6NxMoKYXIkYAEAIx7sSiVUU8,1412
131
- sky/dashboard/out/volumes.html,sha256=9ANb3CRbOsCrBkvnZpeAs7idawJZalvo7kB_qtfueJQ,1416
132
- sky/dashboard/out/workspaces.html,sha256=VHh1d_aaTWNOydZH5uDKJJMPvug8g6mULkRjqxigNCU,1422
133
- sky/dashboard/out/_next/static/Haazh5IQz6F8Wyiqxcaj8/_buildManifest.js,sha256=fU6juI23eV2o12c76krAvb_jtylYA6BZxZI6dTzZ_Es,2428
134
- sky/dashboard/out/_next/static/Haazh5IQz6F8Wyiqxcaj8/_ssgManifest.js,sha256=Z49s4suAsf5y_GfnQSvm4qtq2ggxEbZPfEDTXjy6XgA,80
130
+ sky/dashboard/out/users.html,sha256=UEfuuA3wBXGeYREAgsGMYrGotoCAEDSAm1NON0iUHmM,1412
131
+ sky/dashboard/out/volumes.html,sha256=HZzI24jOAnJHC9VYeWtsn_xUPssHqQLsd91RvZ1Y_IM,1416
132
+ sky/dashboard/out/workspaces.html,sha256=cKipIpcI-RecCgNlJ_eOMrymFG8bRgFKHuDYwDofakE,1422
133
+ sky/dashboard/out/_next/static/Vg53Kzbf7u4o6fYPeOHMe/_buildManifest.js,sha256=fU6juI23eV2o12c76krAvb_jtylYA6BZxZI6dTzZ_Es,2428
134
+ sky/dashboard/out/_next/static/Vg53Kzbf7u4o6fYPeOHMe/_ssgManifest.js,sha256=Z49s4suAsf5y_GfnQSvm4qtq2ggxEbZPfEDTXjy6XgA,80
135
135
  sky/dashboard/out/_next/static/chunks/1121-d0782b9251f0fcd3.js,sha256=jIvnDxaTleAz3HdZK9-RScSB0ZMg8-D63KQmn8avaHI,8883
136
136
  sky/dashboard/out/_next/static/chunks/1141-159df2d4c441a9d1.js,sha256=kdYh_Ek9hdib5emC7Iezojh3qASBnOIUHH5zX_ScR0U,17355
137
137
  sky/dashboard/out/_next/static/chunks/1272-1ef0bf0237faccdb.js,sha256=VJ6y-Z6Eg2T93hQIRfWAbjAkQ7nQhglmIaVbEpKSILY,38451
@@ -186,14 +186,14 @@ sky/dashboard/out/_next/static/chunks/pages/jobs/pools/[pool]-509b2977a6373bf6.j
186
186
  sky/dashboard/out/_next/static/chunks/pages/workspace/new-3f88a1c7e86a3f86.js,sha256=83s5N5CZwIaRcmYMfqn2we60n2VRmgFw6Tbx18b8-e0,762
187
187
  sky/dashboard/out/_next/static/chunks/pages/workspaces/[name]-af76bb06dbb3954f.js,sha256=cGCpDszMI6ckUHVelwAh9ZVk1erfz_UXSLz9GCqGUAE,1495
188
188
  sky/dashboard/out/_next/static/css/4614e06482d7309e.css,sha256=nk6GriyGVd1aGXrLd7BcMibnN4v0z-Q_mXGxrHFWqrE,56126
189
- sky/dashboard/out/clusters/[cluster].html,sha256=v2wAPdPggEbzWwCv4ShB9bI6aT2MwOfDrMIRmddOdMk,2936
190
- sky/dashboard/out/clusters/[cluster]/[job].html,sha256=hVAvKfrD2rJvCF_ryrrkmuUycbmPB8xryuX2CM0Jf8M,2073
191
- sky/dashboard/out/infra/[context].html,sha256=PeQfdiKovWN5Dq3YMtB9_TebvZmCxuBIaQTWsoRYPtI,1436
192
- sky/dashboard/out/jobs/[job].html,sha256=t-e2le9WFqkL2hySYqK5y1feJUas0JKGgZpl5O2c3J4,2304
193
- sky/dashboard/out/jobs/pools/[pool].html,sha256=doXzAIBDesU6Ym8aBSfD40nBeB9P9fPhYM4Ugdz3Xl4,2142
189
+ sky/dashboard/out/clusters/[cluster].html,sha256=NpNuBtgJzf5t-XuL-CqKnu_uAmzAFX6Aq3xPZu5x4Ew,2936
190
+ sky/dashboard/out/clusters/[cluster]/[job].html,sha256=IEY8xFajkMWsQBxQIj5h8e7gBPOd-CXwpzgH5irP-GU,2073
191
+ sky/dashboard/out/infra/[context].html,sha256=qIRANL-oN-cynSDyQ2hLzMOhtbXIeSnzBKDxvBmk_Ck,1436
192
+ sky/dashboard/out/jobs/[job].html,sha256=zDYKANV8qsVsnL0ZzCEFoxAsJ-KHzkNeKhff95zCTGs,2304
193
+ sky/dashboard/out/jobs/pools/[pool].html,sha256=a7c2LtIOA29odiB-vyTelYJeatsrk6MXq_Jn7I-9i_I,2142
194
194
  sky/dashboard/out/videos/cursor-small.mp4,sha256=8tRdp1vjawOrXUar1cfjOc-nkaKmcwCPZx_LO0XlCvQ,203285
195
- sky/dashboard/out/workspace/new.html,sha256=K6HJ2TUYlMNXtpBdiacnyy4Zi-vmU-yPDKziEYP0TlA,1428
196
- sky/dashboard/out/workspaces/[name].html,sha256=XQujwuXBJwPbNE0mkHCxA7BJY--Yc_3Pzc3MPSA2qfc,2759
195
+ sky/dashboard/out/workspace/new.html,sha256=3WhpzNmC95ugk2TtHroV5mpbAYTi_TtjAlvE9txvsUs,1428
196
+ sky/dashboard/out/workspaces/[name].html,sha256=WUjHZgv1Okt2NRgfhDSll6FcyY20MtYrXr8WX4ybWhE,2759
197
197
  sky/data/__init__.py,sha256=Nhaf1NURisXpZuwWANa2IuCyppIuc720FRwqSE2oEwY,184
198
198
  sky/data/data_transfer.py,sha256=N8b0CQebDuHieXjvEVwlYmK6DbQxUGG1RQJEyTbh3dU,12040
199
199
  sky/data/data_utils.py,sha256=AjEA_JRjo9NBMlv-Lq5iV4lBED_YZ1VqBR9pG6fGVWE,35179
@@ -203,7 +203,7 @@ sky/data/storage_utils.py,sha256=bqCE7WQVOpFMxqVRkxee4oLn-iImh4ZL8qB5IicXh0w,142
203
203
  sky/jobs/__init__.py,sha256=BiABNdlab7xZDOv4C34kc1XuxG6C_Ip7Q96mT2iCnIg,1686
204
204
  sky/jobs/constants.py,sha256=74kv_hCMbzDCYIXqa8Tc2BmECweNZIO2s5mP0IDunmg,3500
205
205
  sky/jobs/controller.py,sha256=SymwS24D0nLuVJ_yBgF6055TQptglDiOdssCPNWHy-g,57020
206
- sky/jobs/recovery_strategy.py,sha256=w8HqSnnVJ10nH-ENFO3NpIM70cyxBzTijzH6EFggiaM,36948
206
+ sky/jobs/recovery_strategy.py,sha256=beCgK7eiqs4RUhMFrRfTsE18OsG0f_W7ds7kzhvQSUI,39398
207
207
  sky/jobs/scheduler.py,sha256=rUait5vQoIxAMuxWDRkR6DtFpmmVqQHxECHyhhrY9HI,16564
208
208
  sky/jobs/state.py,sha256=GarWqeMip2dCHXDLPCTDpXnfrS5kiOanJ3wi8gpo6MA,85229
209
209
  sky/jobs/utils.py,sha256=qdwW8KomRaZS3d4FjU7gMkRULfcDT64BbpzUKap-tQs,94601
@@ -268,7 +268,7 @@ sky/provision/kubernetes/constants.py,sha256=vZJQsAVjAgwsOskB48tIFSXtNw7IFnJOQE_
268
268
  sky/provision/kubernetes/instance.py,sha256=Ii-aeRoXKrscmeGfS_AZcMaaA74vJ2aKvD1rBaTowIg,76175
269
269
  sky/provision/kubernetes/network.py,sha256=Dgj8u7IQBHKHt-mSDhYzue1wfDk96FR_8fO89TwuZ2E,12846
270
270
  sky/provision/kubernetes/network_utils.py,sha256=qFiACDq4S1WKMyVbxhGax-K2SJM-4viC8CyEzwvXt6c,11480
271
- sky/provision/kubernetes/utils.py,sha256=LYk1OIw8YwbYuKvcYpjGqU64hJMvnXtONd7b2ew2vXA,148742
271
+ sky/provision/kubernetes/utils.py,sha256=4MC-PlpezlngMOxS3JXkwP7vd1rn8rSsnOC25rbSTOk,151930
272
272
  sky/provision/kubernetes/volume.py,sha256=b5mozvUCw9rsGxiUS9LxR-MyELK-EQHYglJkGTFNobY,11473
273
273
  sky/provision/kubernetes/manifests/fusermount-server-daemonset.yaml,sha256=5oDGZUsDpO1B9E9JZptkakdIy7LWVR_CqHFFZpMulJE,1270
274
274
  sky/provision/lambda_cloud/__init__.py,sha256=6EEvSgtUeEiup9ivIFevHmgv0GqleroO2X0K7TRa2nE,612
@@ -329,7 +329,7 @@ sky/provision/vsphere/common/vapiconnect.py,sha256=piU29ZfdYCJQMV5n-5J0EQ8G56AWO
329
329
  sky/provision/vsphere/common/vim_utils.py,sha256=TjDgxIzV5Iuc5j1aFNL3NpaOwS0KKXhEUEwq7dzQT-s,17849
330
330
  sky/schemas/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
331
331
  sky/schemas/api/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
332
- sky/schemas/api/responses.py,sha256=4KEvw8-lhI81JPRK3gw5Y4AgYJNOqi0bYHPO0KzuiKA,6778
332
+ sky/schemas/api/responses.py,sha256=pg6QMDBj1RjmWorW4eF5DOVD10NwtZdJfu6JOt2BhEI,6812
333
333
  sky/schemas/db/README,sha256=M93NBw29groxXu-Gy7sgqSyxpppXpRBbXxEXANLhVCo,122
334
334
  sky/schemas/db/env.py,sha256=T-2a00Z9RcaIqcMu90R-RNA_lCutsWBRopDy4LQFnoM,2918
335
335
  sky/schemas/db/script.py.mako,sha256=04kgeBtNMa4cCnG8CfQcKt6P6rnloIfj8wy0u_DBydM,704
@@ -387,14 +387,15 @@ sky/server/constants.py,sha256=9hLNn1FsBegnMxoQzYfgHIVPIqon7KufzG4G9yqhS-o,2456
387
387
  sky/server/daemons.py,sha256=XQdqRMVyxyqS9fY2HLqW_cxVR6qgqoQ7irPvRYWvG7E,9092
388
388
  sky/server/metrics.py,sha256=Aa7ZIPGpK3IZXicliX32_EIjY6ejcR_kr8C1p1yvuC8,5696
389
389
  sky/server/rest.py,sha256=295lCvmAJhGTaal2P00ab6z0fxGj4KfxdI94E-2AhQA,14414
390
- sky/server/server.py,sha256=QSmWbT7qEJ6yN6so-rZzU3V_IQ6vSSRys1L2S-dXZAQ,82892
390
+ sky/server/server.py,sha256=t99AzU0BWFGoOsDjh2dWVvi_eR3wzEhVhjHF_ufHp-8,83127
391
391
  sky/server/state.py,sha256=YbVOMJ1JipQQv17gLIGyiGN7MKfnP83qlUa5MB1z0Yk,747
392
392
  sky/server/stream_utils.py,sha256=b8gdWTsvxTnm779mMSdgb1LR_giVP9peKJIn8KIPJKU,10673
393
393
  sky/server/uvicorn.py,sha256=lJROnpJqoZr59zGwYa_pUniV7rEwmZn0PV4t-YYY-yo,11832
394
394
  sky/server/versions.py,sha256=3atZzUa7y1XeKNcrfVxKWAo_5ZyCOnbY7DKpIqed7Do,10011
395
395
  sky/server/auth/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
396
396
  sky/server/auth/authn.py,sha256=zvabLsEAf9Ql6AbXJuWZ54uaiOr1mwFGGvQn84v66H4,2037
397
- sky/server/auth/oauth2_proxy.py,sha256=GlL6a8VbLZbBMjgIeHnacFZGqtWAm3-gBVLw9YYgkvA,9139
397
+ sky/server/auth/loopback.py,sha256=Vk8iaatXBrXJLBsng9StK9kgwcJnMFqbc35exX5Aikc,1069
398
+ sky/server/auth/oauth2_proxy.py,sha256=4iRhSfJuvjb4gDXk3xNIHFrgTPLkZo61znX5YRRkOC0,9374
398
399
  sky/server/html/log.html,sha256=TSGZktua9Ysl_ysg3w60rjxAxhH61AJnsYDHdtqrjmI,6929
399
400
  sky/server/html/token_page.html,sha256=eUndS5u1foL9vaWGPRTLMt7lCzD1g0wYJ2v_EeeFzlc,7046
400
401
  sky/server/requests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -412,7 +413,7 @@ sky/server/requests/serializers/decoders.py,sha256=4V3muIPH_QU_CfGyoHD99IXuJbKZK
412
413
  sky/server/requests/serializers/encoders.py,sha256=kEGUqUDx5mpc2DBxhzcGrSP325R1aMPg5NXUVScXfUs,8425
413
414
  sky/setup_files/MANIFEST.in,sha256=4gbgHHwSdP6BbMJv5XOt-2K6wUVWF_T9CGsdESvh918,776
414
415
  sky/setup_files/alembic.ini,sha256=854_UKvCaFmZ8vI16tSHbGgP9IMFQ42Td6c9Zmn2Oxs,5079
415
- sky/setup_files/dependencies.py,sha256=sgsKCFkGlZXFm1xi50X9TvwM4L_pIhxls-ySAbfZJ94,8888
416
+ sky/setup_files/dependencies.py,sha256=cmVNmYvorzuw2yyOeWQe7Sco7JDky6hYbcKgbKQbosU,8901
416
417
  sky/setup_files/setup.py,sha256=4M8u9Y4wwmFCJk-EfsnMWtpNq7ynzqbjdVTKW3w5GXA,7820
417
418
  sky/skylet/LICENSE,sha256=BnFrJSvUFpMUoH5mOpWnEvaC5R6Uux8W6WXgrte8iYg,12381
418
419
  sky/skylet/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -499,7 +500,7 @@ sky/utils/command_runner.pyi,sha256=FE8lFyxsh6528uSeSS38yk9Yu9HSJ8LFJT0ylMWNR6k,
499
500
  sky/utils/common.py,sha256=yJc110y8rwcBIKEJgb8kUD4e1OeolFEVtonwmqtAxCM,2729
500
501
  sky/utils/common_utils.py,sha256=5_dNGrFtvylmi38HTMLSgxHLbeBgNCr9UH8BDSUbQeI,39053
501
502
  sky/utils/config_utils.py,sha256=agfDWJi79DH5XKD_GBvUwhRwmB0-ZkYbKCjcEgV6gP4,13861
502
- sky/utils/context.py,sha256=uo6Z8Suwk8asaMO_CJ9biCxQOJWPtkgYtw6jxvok4Zo,13092
503
+ sky/utils/context.py,sha256=N_kxD3NXBGRqzb8QsSkrGLvqBt_dD7bIkyerGIOJEcE,13394
503
504
  sky/utils/context_utils.py,sha256=mnJvU65Z-GYZ3G_m-bRGZ7vVExt1MbMwVLwUCfR1Z1Y,7035
504
505
  sky/utils/control_master_utils.py,sha256=iD4M0onjYOdZ2RuxjwMBl4KhafHXJzuHjvqlBUnu-VE,1450
505
506
  sky/utils/controller_utils.py,sha256=Ci8kA00qvBsjeKxTyFcxPhamf1e7F9S0LuggBA6to0o,59951
@@ -564,9 +565,9 @@ sky/workspaces/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
564
565
  sky/workspaces/core.py,sha256=kRrdh-8MhX1953pML1B_DoStnDuNrsmHcZlnWoAxVo0,27218
565
566
  sky/workspaces/server.py,sha256=Box45DS54xXGHy7I3tGKGy-JP0a8G_z6IhfvGlEXtsA,3439
566
567
  sky/workspaces/utils.py,sha256=IIAiFoS6sdb2t0X5YoX9AietpTanZUQNTK8cePun-sY,2143
567
- skypilot_nightly-1.0.0.dev20251003.dist-info/licenses/LICENSE,sha256=emRJAvE7ngL6x0RhQvlns5wJzGI3NEQ_WMjNmd9TZc4,12170
568
- skypilot_nightly-1.0.0.dev20251003.dist-info/METADATA,sha256=ZXOkdungAYdGnjzCNg2A1Ce6h6RqMJsOK7NtzZC23lI,20433
569
- skypilot_nightly-1.0.0.dev20251003.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
570
- skypilot_nightly-1.0.0.dev20251003.dist-info/entry_points.txt,sha256=StA6HYpuHj-Y61L2Ze-hK2IcLWgLZcML5gJu8cs6nU4,36
571
- skypilot_nightly-1.0.0.dev20251003.dist-info/top_level.txt,sha256=qA8QuiNNb6Y1OF-pCUtPEr6sLEwy2xJX06Bd_CrtrHY,4
572
- skypilot_nightly-1.0.0.dev20251003.dist-info/RECORD,,
568
+ skypilot_nightly-1.0.0.dev20251005.dist-info/licenses/LICENSE,sha256=emRJAvE7ngL6x0RhQvlns5wJzGI3NEQ_WMjNmd9TZc4,12170
569
+ skypilot_nightly-1.0.0.dev20251005.dist-info/METADATA,sha256=Hitgcm_5Fb6rO2jc-v4teZIATZ6LC8PSkMn_WFth7bo,20454
570
+ skypilot_nightly-1.0.0.dev20251005.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
571
+ skypilot_nightly-1.0.0.dev20251005.dist-info/entry_points.txt,sha256=StA6HYpuHj-Y61L2Ze-hK2IcLWgLZcML5gJu8cs6nU4,36
572
+ skypilot_nightly-1.0.0.dev20251005.dist-info/top_level.txt,sha256=qA8QuiNNb6Y1OF-pCUtPEr6sLEwy2xJX06Bd_CrtrHY,4
573
+ skypilot_nightly-1.0.0.dev20251005.dist-info/RECORD,,