skypilot-nightly 1.0.0.dev20250731__py3-none-any.whl → 1.0.0.dev20250801__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 (36) hide show
  1. sky/__init__.py +2 -2
  2. sky/client/cli/command.py +4 -0
  3. sky/dashboard/out/404.html +1 -1
  4. sky/dashboard/out/_next/static/chunks/{webpack-5adfc4d4b3db6f71.js → webpack-42cd1b19a6b01078.js} +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.html +1 -1
  14. sky/dashboard/out/users.html +1 -1
  15. sky/dashboard/out/volumes.html +1 -1
  16. sky/dashboard/out/workspace/new.html +1 -1
  17. sky/dashboard/out/workspaces/[name].html +1 -1
  18. sky/dashboard/out/workspaces.html +1 -1
  19. sky/data/data_utils.py +21 -1
  20. sky/data/storage.py +12 -0
  21. sky/provision/runpod/utils.py +27 -12
  22. sky/server/daemons.py +164 -0
  23. sky/server/requests/requests.py +2 -124
  24. sky/server/server.py +2 -1
  25. sky/server/uvicorn.py +2 -1
  26. sky/sky_logging.py +30 -0
  27. sky/skylet/constants.py +2 -1
  28. sky/utils/schemas.py +23 -0
  29. {skypilot_nightly-1.0.0.dev20250731.dist-info → skypilot_nightly-1.0.0.dev20250801.dist-info}/METADATA +1 -1
  30. {skypilot_nightly-1.0.0.dev20250731.dist-info → skypilot_nightly-1.0.0.dev20250801.dist-info}/RECORD +36 -35
  31. /sky/dashboard/out/_next/static/{oKqDxFQ88cquF4nQGE_0w → f2fEsZwJxryJVOYRNtNKE}/_buildManifest.js +0 -0
  32. /sky/dashboard/out/_next/static/{oKqDxFQ88cquF4nQGE_0w → f2fEsZwJxryJVOYRNtNKE}/_ssgManifest.js +0 -0
  33. {skypilot_nightly-1.0.0.dev20250731.dist-info → skypilot_nightly-1.0.0.dev20250801.dist-info}/WHEEL +0 -0
  34. {skypilot_nightly-1.0.0.dev20250731.dist-info → skypilot_nightly-1.0.0.dev20250801.dist-info}/entry_points.txt +0 -0
  35. {skypilot_nightly-1.0.0.dev20250731.dist-info → skypilot_nightly-1.0.0.dev20250801.dist-info}/licenses/LICENSE +0 -0
  36. {skypilot_nightly-1.0.0.dev20250731.dist-info → skypilot_nightly-1.0.0.dev20250801.dist-info}/top_level.txt +0 -0
sky/__init__.py CHANGED
@@ -5,7 +5,7 @@ from typing import Optional
5
5
  import urllib.request
6
6
 
7
7
  # Replaced with the current commit when building the wheels.
8
- _SKYPILOT_COMMIT_SHA = '913f9dd651a2c363231eef760675f1dae49270a1'
8
+ _SKYPILOT_COMMIT_SHA = '45dfcb679d71b0fb8abe30470b1d8c6b6c33ef73'
9
9
 
10
10
 
11
11
  def _get_git_commit():
@@ -35,7 +35,7 @@ def _get_git_commit():
35
35
 
36
36
 
37
37
  __commit__ = _get_git_commit()
38
- __version__ = '1.0.0.dev20250731'
38
+ __version__ = '1.0.0.dev20250801'
39
39
  __root_dir__ = os.path.dirname(os.path.abspath(__file__))
40
40
 
41
41
 
sky/client/cli/command.py CHANGED
@@ -62,6 +62,7 @@ from sky.provision.kubernetes import constants as kubernetes_constants
62
62
  from sky.provision.kubernetes import utils as kubernetes_utils
63
63
  from sky.server import common as server_common
64
64
  from sky.server import constants as server_constants
65
+ from sky.server import versions
65
66
  from sky.server.requests import requests
66
67
  from sky.skylet import constants
67
68
  from sky.skylet import job_lib
@@ -1827,6 +1828,9 @@ def status(verbose: bool, refresh: bool, ip: bool, endpoints: bool,
1827
1828
  show_endpoints = endpoints or endpoint is not None
1828
1829
  show_single_endpoint = endpoint is not None
1829
1830
  show_services = show_services and not any([clusters, ip, endpoints])
1831
+ remote_api_version = versions.get_remote_api_version()
1832
+ if remote_api_version is None or remote_api_version < 12:
1833
+ show_pools = False
1830
1834
 
1831
1835
  query_clusters: Optional[List[str]] = None if not clusters else clusters
1832
1836
  refresh_mode = common.StatusRefreshMode.NONE
@@ -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/b3227360726f12eb.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/b3227360726f12eb.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-5adfc4d4b3db6f71.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-a67ae198457b9886.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_error-c66a4e8afc46f17b.js" defer=""></script><script src="/dashboard/_next/static/oKqDxFQ88cquF4nQGE_0w/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/oKqDxFQ88cquF4nQGE_0w/_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":"oKqDxFQ88cquF4nQGE_0w","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/b3227360726f12eb.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/b3227360726f12eb.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-42cd1b19a6b01078.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-a67ae198457b9886.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_error-c66a4e8afc46f17b.js" defer=""></script><script src="/dashboard/_next/static/f2fEsZwJxryJVOYRNtNKE/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/f2fEsZwJxryJVOYRNtNKE/_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":"f2fEsZwJxryJVOYRNtNKE","assetPrefix":"/dashboard","nextExport":true,"isFallback":false,"gip":true,"scriptLoader":[]}</script></body></html>
@@ -1 +1 @@
1
- !function(){"use strict";var e,t,n,r,c,o,u,i,a,f={},s={};function d(e){var t=s[e];if(void 0!==t)return t.exports;var n=s[e]={exports:{}},r=!0;try{f[e](n,n.exports,d),r=!1}finally{r&&delete s[e]}return n.exports}d.m=f,e=[],d.O=function(t,n,r,c){if(n){c=c||0;for(var o=e.length;o>0&&e[o-1][2]>c;o--)e[o]=e[o-1];e[o]=[n,r,c];return}for(var u=1/0,o=0;o<e.length;o++){for(var n=e[o][0],r=e[o][1],c=e[o][2],i=!0,a=0;a<n.length;a++)u>=c&&Object.keys(d.O).every(function(e){return d.O[e](n[a])})?n.splice(a--,1):(i=!1,c<u&&(u=c));if(i){e.splice(o--,1);var f=r();void 0!==f&&(t=f)}}return t},d.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return d.d(t,{a:t}),t},n=Object.getPrototypeOf?function(e){return Object.getPrototypeOf(e)}:function(e){return e.__proto__},d.t=function(e,r){if(1&r&&(e=this(e)),8&r||"object"==typeof e&&e&&(4&r&&e.__esModule||16&r&&"function"==typeof e.then))return e;var c=Object.create(null);d.r(c);var o={};t=t||[null,n({}),n([]),n(n)];for(var u=2&r&&e;"object"==typeof u&&!~t.indexOf(u);u=n(u))Object.getOwnPropertyNames(u).forEach(function(t){o[t]=function(){return e[t]}});return o.default=function(){return e},d.d(c,o),c},d.d=function(e,t){for(var n in t)d.o(t,n)&&!d.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},d.f={},d.e=function(e){return Promise.all(Object.keys(d.f).reduce(function(t,n){return d.f[n](e,t),t},[]))},d.u=function(e){return 2350===e?"static/chunks/2350.fab69e61bac57b23.js":2369===e?"static/chunks/2369.fc20f0c2c8ed9fe7.js":3937===e?"static/chunks/3937.210053269f121201.js":9025===e?"static/chunks/9025.7937c16bc8623516.js":4937===e?"static/chunks/4937.d6bf67771e353356.js":9984===e?"static/chunks/9984.78ee6d2c6fa4b0e8.js":2003===e?"static/chunks/2003.f90b06bb1f914295.js":691===e?"static/chunks/691.6d99cbfba347cebf.js":2641===e?"static/chunks/2641.142718b6b78a6f9b.js":9847===e?"static/chunks/9847.4c46c5e229c78704.js":4725===e?"static/chunks/4725.42f21f250f91f65b.js":3785===e?"static/chunks/3785.95524bc443db8260.js":4869===e?"static/chunks/4869.18e6a4361a380763.js":"static/chunks/"+e+"-"+({616:"3d59f75e2ccf9321",938:"40d15b6261ec8dc1",1043:"928582d4860fef92",1141:"3f10a5a9f697c630",1272:"1ef0bf0237faccdb",1559:"6c00e20454194859",1664:"22b00e32c9ff96a4",1871:"1df8b686a51f3e3a",3698:"7874720877646365",5230:"f3bb2663e442e86c",5739:"d67458fcb1386c92",6135:"d0e285ac5f3f2485",6601:"234b1cf963c7280b",6989:"983d3ae7a874de98",6990:"08b2a1cae076a943",7411:"b15471acd2cba716",8969:"9a8cca241b30db83"})[e]+".js"},d.miniCssF=function(e){},d.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||Function("return this")()}catch(e){if("object"==typeof window)return window}}(),d.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r={},c="_N_E:",d.l=function(e,t,n,o){if(r[e]){r[e].push(t);return}if(void 0!==n)for(var u,i,a=document.getElementsByTagName("script"),f=0;f<a.length;f++){var s=a[f];if(s.getAttribute("src")==e||s.getAttribute("data-webpack")==c+n){u=s;break}}u||(i=!0,(u=document.createElement("script")).charset="utf-8",u.timeout=120,d.nc&&u.setAttribute("nonce",d.nc),u.setAttribute("data-webpack",c+n),u.src=d.tu(e)),r[e]=[t];var b=function(t,n){u.onerror=u.onload=null,clearTimeout(l);var c=r[e];if(delete r[e],u.parentNode&&u.parentNode.removeChild(u),c&&c.forEach(function(e){return e(n)}),t)return t(n)},l=setTimeout(b.bind(null,void 0,{type:"timeout",target:u}),12e4);u.onerror=b.bind(null,u.onerror),u.onload=b.bind(null,u.onload),i&&document.head.appendChild(u)},d.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},d.tt=function(){return void 0===o&&(o={createScriptURL:function(e){return e}},"undefined"!=typeof trustedTypes&&trustedTypes.createPolicy&&(o=trustedTypes.createPolicy("nextjs#bundler",o))),o},d.tu=function(e){return d.tt().createScriptURL(e)},d.p="/dashboard/_next/",u={2272:0},d.f.j=function(e,t){var n=d.o(u,e)?u[e]:void 0;if(0!==n){if(n)t.push(n[2]);else if(2272!=e){var r=new Promise(function(t,r){n=u[e]=[t,r]});t.push(n[2]=r);var c=d.p+d.u(e),o=Error();d.l(c,function(t){if(d.o(u,e)&&(0!==(n=u[e])&&(u[e]=void 0),n)){var r=t&&("load"===t.type?"missing":t.type),c=t&&t.target&&t.target.src;o.message="Loading chunk "+e+" failed.\n("+r+": "+c+")",o.name="ChunkLoadError",o.type=r,o.request=c,n[1](o)}},"chunk-"+e,e)}else u[e]=0}},d.O.j=function(e){return 0===u[e]},i=function(e,t){var n,r,c=t[0],o=t[1],i=t[2],a=0;if(c.some(function(e){return 0!==u[e]})){for(n in o)d.o(o,n)&&(d.m[n]=o[n]);if(i)var f=i(d)}for(e&&e(t);a<c.length;a++)r=c[a],d.o(u,r)&&u[r]&&u[r][0](),u[r]=0;return d.O(f)},(a=self.webpackChunk_N_E=self.webpackChunk_N_E||[]).forEach(i.bind(null,0)),a.push=i.bind(null,a.push.bind(a)),d.nc=void 0}();
1
+ !function(){"use strict";var e,t,n,r,c,o,u,i,a,f={},s={};function d(e){var t=s[e];if(void 0!==t)return t.exports;var n=s[e]={exports:{}},r=!0;try{f[e](n,n.exports,d),r=!1}finally{r&&delete s[e]}return n.exports}d.m=f,e=[],d.O=function(t,n,r,c){if(n){c=c||0;for(var o=e.length;o>0&&e[o-1][2]>c;o--)e[o]=e[o-1];e[o]=[n,r,c];return}for(var u=1/0,o=0;o<e.length;o++){for(var n=e[o][0],r=e[o][1],c=e[o][2],i=!0,a=0;a<n.length;a++)u>=c&&Object.keys(d.O).every(function(e){return d.O[e](n[a])})?n.splice(a--,1):(i=!1,c<u&&(u=c));if(i){e.splice(o--,1);var f=r();void 0!==f&&(t=f)}}return t},d.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return d.d(t,{a:t}),t},n=Object.getPrototypeOf?function(e){return Object.getPrototypeOf(e)}:function(e){return e.__proto__},d.t=function(e,r){if(1&r&&(e=this(e)),8&r||"object"==typeof e&&e&&(4&r&&e.__esModule||16&r&&"function"==typeof e.then))return e;var c=Object.create(null);d.r(c);var o={};t=t||[null,n({}),n([]),n(n)];for(var u=2&r&&e;"object"==typeof u&&!~t.indexOf(u);u=n(u))Object.getOwnPropertyNames(u).forEach(function(t){o[t]=function(){return e[t]}});return o.default=function(){return e},d.d(c,o),c},d.d=function(e,t){for(var n in t)d.o(t,n)&&!d.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},d.f={},d.e=function(e){return Promise.all(Object.keys(d.f).reduce(function(t,n){return d.f[n](e,t),t},[]))},d.u=function(e){return 2350===e?"static/chunks/2350.fab69e61bac57b23.js":2369===e?"static/chunks/2369.fc20f0c2c8ed9fe7.js":3937===e?"static/chunks/3937.210053269f121201.js":9025===e?"static/chunks/9025.7937c16bc8623516.js":4937===e?"static/chunks/4937.d6bf67771e353356.js":9984===e?"static/chunks/9984.78ee6d2c6fa4b0e8.js":2003===e?"static/chunks/2003.f90b06bb1f914295.js":9847===e?"static/chunks/9847.4c46c5e229c78704.js":4725===e?"static/chunks/4725.42f21f250f91f65b.js":691===e?"static/chunks/691.6d99cbfba347cebf.js":2641===e?"static/chunks/2641.142718b6b78a6f9b.js":3785===e?"static/chunks/3785.95524bc443db8260.js":4869===e?"static/chunks/4869.18e6a4361a380763.js":"static/chunks/"+e+"-"+({616:"3d59f75e2ccf9321",938:"40d15b6261ec8dc1",1043:"928582d4860fef92",1141:"3f10a5a9f697c630",1272:"1ef0bf0237faccdb",1559:"6c00e20454194859",1664:"22b00e32c9ff96a4",1871:"1df8b686a51f3e3a",3698:"7874720877646365",5230:"f3bb2663e442e86c",5739:"d67458fcb1386c92",6135:"d0e285ac5f3f2485",6601:"234b1cf963c7280b",6989:"983d3ae7a874de98",6990:"08b2a1cae076a943",7411:"b15471acd2cba716",8969:"9a8cca241b30db83"})[e]+".js"},d.miniCssF=function(e){},d.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||Function("return this")()}catch(e){if("object"==typeof window)return window}}(),d.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r={},c="_N_E:",d.l=function(e,t,n,o){if(r[e]){r[e].push(t);return}if(void 0!==n)for(var u,i,a=document.getElementsByTagName("script"),f=0;f<a.length;f++){var s=a[f];if(s.getAttribute("src")==e||s.getAttribute("data-webpack")==c+n){u=s;break}}u||(i=!0,(u=document.createElement("script")).charset="utf-8",u.timeout=120,d.nc&&u.setAttribute("nonce",d.nc),u.setAttribute("data-webpack",c+n),u.src=d.tu(e)),r[e]=[t];var b=function(t,n){u.onerror=u.onload=null,clearTimeout(l);var c=r[e];if(delete r[e],u.parentNode&&u.parentNode.removeChild(u),c&&c.forEach(function(e){return e(n)}),t)return t(n)},l=setTimeout(b.bind(null,void 0,{type:"timeout",target:u}),12e4);u.onerror=b.bind(null,u.onerror),u.onload=b.bind(null,u.onload),i&&document.head.appendChild(u)},d.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},d.tt=function(){return void 0===o&&(o={createScriptURL:function(e){return e}},"undefined"!=typeof trustedTypes&&trustedTypes.createPolicy&&(o=trustedTypes.createPolicy("nextjs#bundler",o))),o},d.tu=function(e){return d.tt().createScriptURL(e)},d.p="/dashboard/_next/",u={2272:0},d.f.j=function(e,t){var n=d.o(u,e)?u[e]:void 0;if(0!==n){if(n)t.push(n[2]);else if(2272!=e){var r=new Promise(function(t,r){n=u[e]=[t,r]});t.push(n[2]=r);var c=d.p+d.u(e),o=Error();d.l(c,function(t){if(d.o(u,e)&&(0!==(n=u[e])&&(u[e]=void 0),n)){var r=t&&("load"===t.type?"missing":t.type),c=t&&t.target&&t.target.src;o.message="Loading chunk "+e+" failed.\n("+r+": "+c+")",o.name="ChunkLoadError",o.type=r,o.request=c,n[1](o)}},"chunk-"+e,e)}else u[e]=0}},d.O.j=function(e){return 0===u[e]},i=function(e,t){var n,r,c=t[0],o=t[1],i=t[2],a=0;if(c.some(function(e){return 0!==u[e]})){for(n in o)d.o(o,n)&&(d.m[n]=o[n]);if(i)var f=i(d)}for(e&&e(t);a<c.length;a++)r=c[a],d.o(u,r)&&u[r]&&u[r][0](),u[r]=0;return d.O(f)},(a=self.webpackChunk_N_E=self.webpackChunk_N_E||[]).forEach(i.bind(null,0)),a.push=i.bind(null,a.push.bind(a)),d.nc=void 0}();
@@ -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/b3227360726f12eb.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/b3227360726f12eb.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-5adfc4d4b3db6f71.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-a67ae198457b9886.js" defer=""></script><script src="/dashboard/_next/static/chunks/616-3d59f75e2ccf9321.js" defer=""></script><script src="/dashboard/_next/static/chunks/5230-f3bb2663e442e86c.js" defer=""></script><script src="/dashboard/_next/static/chunks/5739-d67458fcb1386c92.js" defer=""></script><script src="/dashboard/_next/static/chunks/1664-22b00e32c9ff96a4.js" defer=""></script><script src="/dashboard/_next/static/chunks/7411-b15471acd2cba716.js" defer=""></script><script src="/dashboard/_next/static/chunks/6989-983d3ae7a874de98.js" defer=""></script><script src="/dashboard/_next/static/chunks/3698-7874720877646365.js" defer=""></script><script src="/dashboard/_next/static/chunks/6135-d0e285ac5f3f2485.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/clusters/%5Bcluster%5D/%5Bjob%5D-fa63e8b1d203f298.js" defer=""></script><script src="/dashboard/_next/static/oKqDxFQ88cquF4nQGE_0w/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/oKqDxFQ88cquF4nQGE_0w/_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":"oKqDxFQ88cquF4nQGE_0w","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/b3227360726f12eb.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/b3227360726f12eb.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-42cd1b19a6b01078.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-a67ae198457b9886.js" defer=""></script><script src="/dashboard/_next/static/chunks/616-3d59f75e2ccf9321.js" defer=""></script><script src="/dashboard/_next/static/chunks/5230-f3bb2663e442e86c.js" defer=""></script><script src="/dashboard/_next/static/chunks/5739-d67458fcb1386c92.js" defer=""></script><script src="/dashboard/_next/static/chunks/1664-22b00e32c9ff96a4.js" defer=""></script><script src="/dashboard/_next/static/chunks/7411-b15471acd2cba716.js" defer=""></script><script src="/dashboard/_next/static/chunks/6989-983d3ae7a874de98.js" defer=""></script><script src="/dashboard/_next/static/chunks/3698-7874720877646365.js" defer=""></script><script src="/dashboard/_next/static/chunks/6135-d0e285ac5f3f2485.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/clusters/%5Bcluster%5D/%5Bjob%5D-fa63e8b1d203f298.js" defer=""></script><script src="/dashboard/_next/static/f2fEsZwJxryJVOYRNtNKE/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/f2fEsZwJxryJVOYRNtNKE/_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":"f2fEsZwJxryJVOYRNtNKE","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/b3227360726f12eb.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/b3227360726f12eb.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-5adfc4d4b3db6f71.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-a67ae198457b9886.js" defer=""></script><script src="/dashboard/_next/static/chunks/616-3d59f75e2ccf9321.js" defer=""></script><script src="/dashboard/_next/static/chunks/5230-f3bb2663e442e86c.js" defer=""></script><script src="/dashboard/_next/static/chunks/5739-d67458fcb1386c92.js" defer=""></script><script src="/dashboard/_next/static/chunks/1664-22b00e32c9ff96a4.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/1559-6c00e20454194859.js" defer=""></script><script src="/dashboard/_next/static/chunks/6212-7bd06f60ba693125.js" defer=""></script><script src="/dashboard/_next/static/chunks/6989-983d3ae7a874de98.js" defer=""></script><script src="/dashboard/_next/static/chunks/3698-7874720877646365.js" defer=""></script><script src="/dashboard/_next/static/chunks/6135-d0e285ac5f3f2485.js" defer=""></script><script src="/dashboard/_next/static/chunks/6990-08b2a1cae076a943.js" defer=""></script><script src="/dashboard/_next/static/chunks/8969-9a8cca241b30db83.js" defer=""></script><script src="/dashboard/_next/static/chunks/1043-928582d4860fef92.js" defer=""></script><script src="/dashboard/_next/static/chunks/6601-234b1cf963c7280b.js" defer=""></script><script src="/dashboard/_next/static/chunks/938-40d15b6261ec8dc1.js" defer=""></script><script src="/dashboard/_next/static/chunks/1871-1df8b686a51f3e3a.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/clusters/%5Bcluster%5D-665fa5d96dd41d67.js" defer=""></script><script src="/dashboard/_next/static/oKqDxFQ88cquF4nQGE_0w/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/oKqDxFQ88cquF4nQGE_0w/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/clusters/[cluster]","query":{},"buildId":"oKqDxFQ88cquF4nQGE_0w","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/b3227360726f12eb.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/b3227360726f12eb.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-42cd1b19a6b01078.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-a67ae198457b9886.js" defer=""></script><script src="/dashboard/_next/static/chunks/616-3d59f75e2ccf9321.js" defer=""></script><script src="/dashboard/_next/static/chunks/5230-f3bb2663e442e86c.js" defer=""></script><script src="/dashboard/_next/static/chunks/5739-d67458fcb1386c92.js" defer=""></script><script src="/dashboard/_next/static/chunks/1664-22b00e32c9ff96a4.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/1559-6c00e20454194859.js" defer=""></script><script src="/dashboard/_next/static/chunks/6212-7bd06f60ba693125.js" defer=""></script><script src="/dashboard/_next/static/chunks/6989-983d3ae7a874de98.js" defer=""></script><script src="/dashboard/_next/static/chunks/3698-7874720877646365.js" defer=""></script><script src="/dashboard/_next/static/chunks/6135-d0e285ac5f3f2485.js" defer=""></script><script src="/dashboard/_next/static/chunks/6990-08b2a1cae076a943.js" defer=""></script><script src="/dashboard/_next/static/chunks/8969-9a8cca241b30db83.js" defer=""></script><script src="/dashboard/_next/static/chunks/1043-928582d4860fef92.js" defer=""></script><script src="/dashboard/_next/static/chunks/6601-234b1cf963c7280b.js" defer=""></script><script src="/dashboard/_next/static/chunks/938-40d15b6261ec8dc1.js" defer=""></script><script src="/dashboard/_next/static/chunks/1871-1df8b686a51f3e3a.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/clusters/%5Bcluster%5D-665fa5d96dd41d67.js" defer=""></script><script src="/dashboard/_next/static/f2fEsZwJxryJVOYRNtNKE/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/f2fEsZwJxryJVOYRNtNKE/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/clusters/[cluster]","query":{},"buildId":"f2fEsZwJxryJVOYRNtNKE","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/b3227360726f12eb.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/b3227360726f12eb.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-5adfc4d4b3db6f71.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-a67ae198457b9886.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/clusters-956ad430075efee8.js" defer=""></script><script src="/dashboard/_next/static/oKqDxFQ88cquF4nQGE_0w/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/oKqDxFQ88cquF4nQGE_0w/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/clusters","query":{},"buildId":"oKqDxFQ88cquF4nQGE_0w","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/b3227360726f12eb.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/b3227360726f12eb.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-42cd1b19a6b01078.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-a67ae198457b9886.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/clusters-956ad430075efee8.js" defer=""></script><script src="/dashboard/_next/static/f2fEsZwJxryJVOYRNtNKE/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/f2fEsZwJxryJVOYRNtNKE/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/clusters","query":{},"buildId":"f2fEsZwJxryJVOYRNtNKE","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/b3227360726f12eb.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/b3227360726f12eb.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-5adfc4d4b3db6f71.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-a67ae198457b9886.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/config-8620d099cbef8608.js" defer=""></script><script src="/dashboard/_next/static/oKqDxFQ88cquF4nQGE_0w/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/oKqDxFQ88cquF4nQGE_0w/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/config","query":{},"buildId":"oKqDxFQ88cquF4nQGE_0w","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/b3227360726f12eb.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/b3227360726f12eb.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-42cd1b19a6b01078.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-a67ae198457b9886.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/config-8620d099cbef8608.js" defer=""></script><script src="/dashboard/_next/static/f2fEsZwJxryJVOYRNtNKE/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/f2fEsZwJxryJVOYRNtNKE/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/config","query":{},"buildId":"f2fEsZwJxryJVOYRNtNKE","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/b3227360726f12eb.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/b3227360726f12eb.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-5adfc4d4b3db6f71.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-a67ae198457b9886.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/index-444f1804401f04ea.js" defer=""></script><script src="/dashboard/_next/static/oKqDxFQ88cquF4nQGE_0w/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/oKqDxFQ88cquF4nQGE_0w/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/","query":{},"buildId":"oKqDxFQ88cquF4nQGE_0w","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/b3227360726f12eb.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/b3227360726f12eb.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-42cd1b19a6b01078.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-a67ae198457b9886.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/index-444f1804401f04ea.js" defer=""></script><script src="/dashboard/_next/static/f2fEsZwJxryJVOYRNtNKE/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/f2fEsZwJxryJVOYRNtNKE/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/","query":{},"buildId":"f2fEsZwJxryJVOYRNtNKE","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/b3227360726f12eb.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/b3227360726f12eb.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-5adfc4d4b3db6f71.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-a67ae198457b9886.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/infra/%5Bcontext%5D-9cfd875eecb6eaf5.js" defer=""></script><script src="/dashboard/_next/static/oKqDxFQ88cquF4nQGE_0w/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/oKqDxFQ88cquF4nQGE_0w/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/infra/[context]","query":{},"buildId":"oKqDxFQ88cquF4nQGE_0w","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/b3227360726f12eb.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/b3227360726f12eb.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-42cd1b19a6b01078.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-a67ae198457b9886.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/infra/%5Bcontext%5D-9cfd875eecb6eaf5.js" defer=""></script><script src="/dashboard/_next/static/f2fEsZwJxryJVOYRNtNKE/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/f2fEsZwJxryJVOYRNtNKE/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/infra/[context]","query":{},"buildId":"f2fEsZwJxryJVOYRNtNKE","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/b3227360726f12eb.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/b3227360726f12eb.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-5adfc4d4b3db6f71.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-a67ae198457b9886.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/infra-0fbdc9072f19fbe2.js" defer=""></script><script src="/dashboard/_next/static/oKqDxFQ88cquF4nQGE_0w/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/oKqDxFQ88cquF4nQGE_0w/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/infra","query":{},"buildId":"oKqDxFQ88cquF4nQGE_0w","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/b3227360726f12eb.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/b3227360726f12eb.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-42cd1b19a6b01078.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-a67ae198457b9886.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/infra-0fbdc9072f19fbe2.js" defer=""></script><script src="/dashboard/_next/static/f2fEsZwJxryJVOYRNtNKE/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/f2fEsZwJxryJVOYRNtNKE/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/infra","query":{},"buildId":"f2fEsZwJxryJVOYRNtNKE","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/b3227360726f12eb.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/b3227360726f12eb.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-5adfc4d4b3db6f71.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-a67ae198457b9886.js" defer=""></script><script src="/dashboard/_next/static/chunks/616-3d59f75e2ccf9321.js" defer=""></script><script src="/dashboard/_next/static/chunks/5230-f3bb2663e442e86c.js" defer=""></script><script src="/dashboard/_next/static/chunks/5739-d67458fcb1386c92.js" defer=""></script><script src="/dashboard/_next/static/chunks/1664-22b00e32c9ff96a4.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/6212-7bd06f60ba693125.js" defer=""></script><script src="/dashboard/_next/static/chunks/6989-983d3ae7a874de98.js" defer=""></script><script src="/dashboard/_next/static/chunks/3698-7874720877646365.js" defer=""></script><script src="/dashboard/_next/static/chunks/6135-d0e285ac5f3f2485.js" defer=""></script><script src="/dashboard/_next/static/chunks/8969-9a8cca241b30db83.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/jobs/%5Bjob%5D-b25c109d6e41bcf4.js" defer=""></script><script src="/dashboard/_next/static/oKqDxFQ88cquF4nQGE_0w/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/oKqDxFQ88cquF4nQGE_0w/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/jobs/[job]","query":{},"buildId":"oKqDxFQ88cquF4nQGE_0w","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/b3227360726f12eb.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/b3227360726f12eb.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-42cd1b19a6b01078.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-a67ae198457b9886.js" defer=""></script><script src="/dashboard/_next/static/chunks/616-3d59f75e2ccf9321.js" defer=""></script><script src="/dashboard/_next/static/chunks/5230-f3bb2663e442e86c.js" defer=""></script><script src="/dashboard/_next/static/chunks/5739-d67458fcb1386c92.js" defer=""></script><script src="/dashboard/_next/static/chunks/1664-22b00e32c9ff96a4.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/6212-7bd06f60ba693125.js" defer=""></script><script src="/dashboard/_next/static/chunks/6989-983d3ae7a874de98.js" defer=""></script><script src="/dashboard/_next/static/chunks/3698-7874720877646365.js" defer=""></script><script src="/dashboard/_next/static/chunks/6135-d0e285ac5f3f2485.js" defer=""></script><script src="/dashboard/_next/static/chunks/8969-9a8cca241b30db83.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/jobs/%5Bjob%5D-b25c109d6e41bcf4.js" defer=""></script><script src="/dashboard/_next/static/f2fEsZwJxryJVOYRNtNKE/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/f2fEsZwJxryJVOYRNtNKE/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/jobs/[job]","query":{},"buildId":"f2fEsZwJxryJVOYRNtNKE","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/b3227360726f12eb.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/b3227360726f12eb.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-5adfc4d4b3db6f71.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-a67ae198457b9886.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/jobs-6393a9edc7322b54.js" defer=""></script><script src="/dashboard/_next/static/oKqDxFQ88cquF4nQGE_0w/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/oKqDxFQ88cquF4nQGE_0w/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/jobs","query":{},"buildId":"oKqDxFQ88cquF4nQGE_0w","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/b3227360726f12eb.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/b3227360726f12eb.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-42cd1b19a6b01078.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-a67ae198457b9886.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/jobs-6393a9edc7322b54.js" defer=""></script><script src="/dashboard/_next/static/f2fEsZwJxryJVOYRNtNKE/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/f2fEsZwJxryJVOYRNtNKE/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/jobs","query":{},"buildId":"f2fEsZwJxryJVOYRNtNKE","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/b3227360726f12eb.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/b3227360726f12eb.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-5adfc4d4b3db6f71.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-a67ae198457b9886.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/users-34d6bb10c3b3ee3d.js" defer=""></script><script src="/dashboard/_next/static/oKqDxFQ88cquF4nQGE_0w/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/oKqDxFQ88cquF4nQGE_0w/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/users","query":{},"buildId":"oKqDxFQ88cquF4nQGE_0w","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/b3227360726f12eb.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/b3227360726f12eb.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-42cd1b19a6b01078.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-a67ae198457b9886.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/users-34d6bb10c3b3ee3d.js" defer=""></script><script src="/dashboard/_next/static/f2fEsZwJxryJVOYRNtNKE/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/f2fEsZwJxryJVOYRNtNKE/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/users","query":{},"buildId":"f2fEsZwJxryJVOYRNtNKE","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/b3227360726f12eb.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/b3227360726f12eb.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-5adfc4d4b3db6f71.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-a67ae198457b9886.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/volumes-225c8dae0634eb7f.js" defer=""></script><script src="/dashboard/_next/static/oKqDxFQ88cquF4nQGE_0w/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/oKqDxFQ88cquF4nQGE_0w/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/volumes","query":{},"buildId":"oKqDxFQ88cquF4nQGE_0w","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/b3227360726f12eb.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/b3227360726f12eb.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-42cd1b19a6b01078.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-a67ae198457b9886.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/volumes-225c8dae0634eb7f.js" defer=""></script><script src="/dashboard/_next/static/f2fEsZwJxryJVOYRNtNKE/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/f2fEsZwJxryJVOYRNtNKE/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/volumes","query":{},"buildId":"f2fEsZwJxryJVOYRNtNKE","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/b3227360726f12eb.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/b3227360726f12eb.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-5adfc4d4b3db6f71.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-a67ae198457b9886.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/workspace/new-92f741084a89e27b.js" defer=""></script><script src="/dashboard/_next/static/oKqDxFQ88cquF4nQGE_0w/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/oKqDxFQ88cquF4nQGE_0w/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/workspace/new","query":{},"buildId":"oKqDxFQ88cquF4nQGE_0w","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/b3227360726f12eb.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/b3227360726f12eb.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-42cd1b19a6b01078.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-a67ae198457b9886.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/workspace/new-92f741084a89e27b.js" defer=""></script><script src="/dashboard/_next/static/f2fEsZwJxryJVOYRNtNKE/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/f2fEsZwJxryJVOYRNtNKE/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/workspace/new","query":{},"buildId":"f2fEsZwJxryJVOYRNtNKE","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/b3227360726f12eb.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/b3227360726f12eb.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-5adfc4d4b3db6f71.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-a67ae198457b9886.js" defer=""></script><script src="/dashboard/_next/static/chunks/616-3d59f75e2ccf9321.js" defer=""></script><script src="/dashboard/_next/static/chunks/5230-f3bb2663e442e86c.js" defer=""></script><script src="/dashboard/_next/static/chunks/5739-d67458fcb1386c92.js" defer=""></script><script src="/dashboard/_next/static/chunks/1664-22b00e32c9ff96a4.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/1559-6c00e20454194859.js" defer=""></script><script src="/dashboard/_next/static/chunks/6989-983d3ae7a874de98.js" defer=""></script><script src="/dashboard/_next/static/chunks/3698-7874720877646365.js" defer=""></script><script src="/dashboard/_next/static/chunks/6135-d0e285ac5f3f2485.js" defer=""></script><script src="/dashboard/_next/static/chunks/6990-08b2a1cae076a943.js" defer=""></script><script src="/dashboard/_next/static/chunks/8969-9a8cca241b30db83.js" defer=""></script><script src="/dashboard/_next/static/chunks/1043-928582d4860fef92.js" defer=""></script><script src="/dashboard/_next/static/chunks/6601-234b1cf963c7280b.js" defer=""></script><script src="/dashboard/_next/static/chunks/938-40d15b6261ec8dc1.js" defer=""></script><script src="/dashboard/_next/static/chunks/1141-3f10a5a9f697c630.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/workspaces/%5Bname%5D-4d41c9023287f59a.js" defer=""></script><script src="/dashboard/_next/static/oKqDxFQ88cquF4nQGE_0w/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/oKqDxFQ88cquF4nQGE_0w/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/workspaces/[name]","query":{},"buildId":"oKqDxFQ88cquF4nQGE_0w","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/b3227360726f12eb.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/b3227360726f12eb.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-42cd1b19a6b01078.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-a67ae198457b9886.js" defer=""></script><script src="/dashboard/_next/static/chunks/616-3d59f75e2ccf9321.js" defer=""></script><script src="/dashboard/_next/static/chunks/5230-f3bb2663e442e86c.js" defer=""></script><script src="/dashboard/_next/static/chunks/5739-d67458fcb1386c92.js" defer=""></script><script src="/dashboard/_next/static/chunks/1664-22b00e32c9ff96a4.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/1559-6c00e20454194859.js" defer=""></script><script src="/dashboard/_next/static/chunks/6989-983d3ae7a874de98.js" defer=""></script><script src="/dashboard/_next/static/chunks/3698-7874720877646365.js" defer=""></script><script src="/dashboard/_next/static/chunks/6135-d0e285ac5f3f2485.js" defer=""></script><script src="/dashboard/_next/static/chunks/6990-08b2a1cae076a943.js" defer=""></script><script src="/dashboard/_next/static/chunks/8969-9a8cca241b30db83.js" defer=""></script><script src="/dashboard/_next/static/chunks/1043-928582d4860fef92.js" defer=""></script><script src="/dashboard/_next/static/chunks/6601-234b1cf963c7280b.js" defer=""></script><script src="/dashboard/_next/static/chunks/938-40d15b6261ec8dc1.js" defer=""></script><script src="/dashboard/_next/static/chunks/1141-3f10a5a9f697c630.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/workspaces/%5Bname%5D-4d41c9023287f59a.js" defer=""></script><script src="/dashboard/_next/static/f2fEsZwJxryJVOYRNtNKE/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/f2fEsZwJxryJVOYRNtNKE/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/workspaces/[name]","query":{},"buildId":"f2fEsZwJxryJVOYRNtNKE","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/b3227360726f12eb.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/b3227360726f12eb.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-5adfc4d4b3db6f71.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-a67ae198457b9886.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/workspaces-e4cb7e97d37e93ad.js" defer=""></script><script src="/dashboard/_next/static/oKqDxFQ88cquF4nQGE_0w/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/oKqDxFQ88cquF4nQGE_0w/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/workspaces","query":{},"buildId":"oKqDxFQ88cquF4nQGE_0w","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/b3227360726f12eb.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/b3227360726f12eb.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-42cd1b19a6b01078.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-a67ae198457b9886.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/workspaces-e4cb7e97d37e93ad.js" defer=""></script><script src="/dashboard/_next/static/f2fEsZwJxryJVOYRNtNKE/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/f2fEsZwJxryJVOYRNtNKE/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/workspaces","query":{},"buildId":"f2fEsZwJxryJVOYRNtNKE","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
sky/data/data_utils.py CHANGED
@@ -624,6 +624,7 @@ class Rclone:
624
624
  IBM = 'IBM'
625
625
  R2 = 'R2'
626
626
  AZURE = 'AZURE'
627
+ NEBIUS = 'NEBIUS'
627
628
 
628
629
  def get_profile_name(self, bucket_name: str) -> str:
629
630
  """Gets the Rclone profile name for a given bucket.
@@ -640,7 +641,8 @@ class Rclone:
640
641
  Rclone.RcloneStores.GCS: 'sky-gcs',
641
642
  Rclone.RcloneStores.IBM: 'sky-ibm',
642
643
  Rclone.RcloneStores.R2: 'sky-r2',
643
- Rclone.RcloneStores.AZURE: 'sky-azure'
644
+ Rclone.RcloneStores.AZURE: 'sky-azure',
645
+ Rclone.RcloneStores.NEBIUS: 'sky-nebius'
644
646
  }
645
647
  return f'{profile_prefix[self]}-{bucket_name}'
646
648
 
@@ -728,6 +730,24 @@ class Rclone:
728
730
  account = {storage_account_name}
729
731
  key = {storage_account_key}
730
732
  """)
733
+ elif self is Rclone.RcloneStores.NEBIUS:
734
+ nebius_session = nebius.session()
735
+ nebius_credentials = nebius.get_nebius_credentials(
736
+ nebius_session)
737
+ # Get endpoint URL from the client
738
+ client = nebius.client('s3')
739
+ endpoint_url = client.meta.endpoint_url
740
+ access_key_id = nebius_credentials.access_key
741
+ secret_access_key = nebius_credentials.secret_key
742
+ config = textwrap.dedent(f"""\
743
+ [{rclone_profile_name}]
744
+ type = s3
745
+ provider = Other
746
+ access_key_id = {access_key_id}
747
+ secret_access_key = {secret_access_key}
748
+ endpoint = {endpoint_url}
749
+ acl = private
750
+ """)
731
751
  else:
732
752
  with ux_utils.print_exception_no_traceback():
733
753
  raise NotImplementedError(
sky/data/storage.py CHANGED
@@ -4558,3 +4558,15 @@ class NebiusStore(S3CompatibleStore):
4558
4558
  return mounting_utils.get_nebius_mount_cmd(nebius.NEBIUS_PROFILE_NAME,
4559
4559
  bucket_name, endpoint_url,
4560
4560
  mount_path, bucket_sub_path)
4561
+
4562
+ def mount_cached_command(self, mount_path: str) -> str:
4563
+ """Nebius-specific cached mount implementation using rclone."""
4564
+ install_cmd = mounting_utils.get_rclone_install_cmd()
4565
+ rclone_profile_name = (
4566
+ data_utils.Rclone.RcloneStores.NEBIUS.get_profile_name(self.name))
4567
+ rclone_config = data_utils.Rclone.RcloneStores.NEBIUS.get_config(
4568
+ rclone_profile_name=rclone_profile_name)
4569
+ mount_cached_cmd = mounting_utils.get_mount_cached_cmd(
4570
+ rclone_config, rclone_profile_name, self.bucket.name, mount_path)
4571
+ return mounting_utils.get_mounting_command(mount_path, install_cmd,
4572
+ mount_cached_cmd)
@@ -270,18 +270,17 @@ def launch(cluster_name: str, node_type: str, instance_type: str, region: str,
270
270
  docker_login_config: Optional[Dict[str, str]]) -> str:
271
271
  """Launches an instance with the given parameters.
272
272
 
273
- Converts the instance_type to the RunPod GPU name, finds the specs for the
274
- GPU, and launches the instance.
273
+ For CPU instances, we directly use the instance_type for launching the
274
+ instance.
275
+
276
+ For GPU instances, we convert the instance_type to the RunPod GPU name,
277
+ and finds the specs for the GPU, before launching the instance.
275
278
 
276
279
  Returns:
277
280
  instance_id: The instance ID.
278
281
  """
279
282
  name = f'{cluster_name}-{node_type}'
280
- gpu_type = GPU_NAME_MAP[instance_type.split('_')[1]]
281
- gpu_quantity = int(instance_type.split('_')[0].replace('x', ''))
282
- cloud_type = instance_type.split('_')[2]
283
283
 
284
- gpu_specs = runpod.runpod.get_gpu(gpu_type)
285
284
  # TODO(zhwu): keep this align with setups in
286
285
  # `provision.kuberunetes.instance.py`
287
286
  setup_cmd = (
@@ -329,12 +328,7 @@ def launch(cluster_name: str, node_type: str, instance_type: str, region: str,
329
328
  params = {
330
329
  'name': name,
331
330
  'image_name': image_name_formatted,
332
- 'gpu_type_id': gpu_type,
333
- 'cloud_type': cloud_type,
334
331
  'container_disk_in_gb': disk_size,
335
- 'min_vcpu_count': 4 * gpu_quantity,
336
- 'min_memory_in_gb': gpu_specs['memoryInGb'] * gpu_quantity,
337
- 'gpu_count': gpu_quantity,
338
332
  'country_code': region,
339
333
  'data_center_id': zone,
340
334
  'ports': ports_str,
@@ -343,12 +337,33 @@ def launch(cluster_name: str, node_type: str, instance_type: str, region: str,
343
337
  'template_id': template_id,
344
338
  }
345
339
 
340
+ # GPU instance types start with f'{gpu_count}x',
341
+ # CPU instance types start with 'cpu'.
342
+ is_cpu_instance = instance_type.startswith('cpu')
343
+ if is_cpu_instance:
344
+ # RunPod CPU instances can be uniquely identified by the instance_id.
345
+ params.update({
346
+ 'instance_id': instance_type,
347
+ })
348
+ else:
349
+ gpu_type = GPU_NAME_MAP[instance_type.split('_')[1]]
350
+ gpu_quantity = int(instance_type.split('_')[0].replace('x', ''))
351
+ cloud_type = instance_type.split('_')[2]
352
+ gpu_specs = runpod.runpod.get_gpu(gpu_type)
353
+ params.update({
354
+ 'gpu_type_id': gpu_type,
355
+ 'cloud_type': cloud_type,
356
+ 'min_vcpu_count': 4 * gpu_quantity,
357
+ 'min_memory_in_gb': gpu_specs['memoryInGb'] * gpu_quantity,
358
+ 'gpu_count': gpu_quantity,
359
+ })
360
+
346
361
  if preemptible is None or not preemptible:
347
362
  new_instance = runpod.runpod.create_pod(**params)
348
363
  else:
349
364
  new_instance = runpod_commands.create_spot_pod(
350
365
  bid_per_gpu=bid_per_gpu,
351
- **params,
366
+ **params, # type: ignore[arg-type]
352
367
  )
353
368
 
354
369
  return new_instance['id']
sky/server/daemons.py ADDED
@@ -0,0 +1,164 @@
1
+ """Internal server daemons that run in the background."""
2
+ import dataclasses
3
+ import os
4
+ import time
5
+ from typing import Callable
6
+
7
+ from sky import sky_logging
8
+ from sky import skypilot_config
9
+ from sky.server import constants as server_constants
10
+ from sky.utils import common
11
+ from sky.utils import env_options
12
+ from sky.utils import ux_utils
13
+
14
+ logger = sky_logging.init_logger(__name__)
15
+
16
+
17
+ @dataclasses.dataclass
18
+ class InternalRequestDaemon:
19
+ """Internal daemon that runs an event in the background."""
20
+
21
+ id: str
22
+ name: str
23
+ event_fn: Callable[[], None]
24
+ default_log_level: str = 'INFO'
25
+
26
+ def refresh_log_level(self) -> int:
27
+ # pylint: disable=import-outside-toplevel
28
+ import logging
29
+
30
+ try:
31
+ # Refresh config within the while loop.
32
+ # Since this is a long running daemon,
33
+ # reload_config_for_new_request()
34
+ # is not called in between the event runs.
35
+ skypilot_config.safe_reload_config()
36
+ # Get the configured log level for the daemon inside the event loop
37
+ # in case the log level changes after the API server is started.
38
+ level_str = skypilot_config.get_nested(
39
+ ('daemons', self.id, 'log_level'), self.default_log_level)
40
+ return getattr(logging, level_str.upper())
41
+ except AttributeError:
42
+ # Bad level should be rejected by
43
+ # schema validation, just in case.
44
+ logger.warning(f'Invalid log level: {level_str}, using DEBUG')
45
+ return logging.DEBUG
46
+ except Exception as e: # pylint: disable=broad-except
47
+ logger.exception(f'Error refreshing log level for {self.id}: {e}')
48
+ return logging.DEBUG
49
+
50
+ def run_event(self):
51
+ """Run the event."""
52
+
53
+ # Disable logging for periodic refresh to avoid the usage message being
54
+ # sent multiple times.
55
+ os.environ[env_options.Options.DISABLE_LOGGING.env_key] = '1'
56
+
57
+ level = self.refresh_log_level()
58
+ while True:
59
+ try:
60
+ with ux_utils.enable_traceback(), \
61
+ sky_logging.set_sky_logging_levels(level):
62
+ sky_logging.reload_logger()
63
+ level = self.refresh_log_level()
64
+ self.event_fn()
65
+ except Exception: # pylint: disable=broad-except
66
+ # It is OK to fail to run the event, as the event is not
67
+ # critical, but we should log the error.
68
+ logger.exception(
69
+ f'Error running {self.name} event. '
70
+ f'Restarting in '
71
+ f'{server_constants.DAEMON_RESTART_INTERVAL_SECONDS} '
72
+ 'seconds...')
73
+ time.sleep(server_constants.DAEMON_RESTART_INTERVAL_SECONDS)
74
+
75
+
76
+ def refresh_cluster_status_event():
77
+ """Periodically refresh the cluster status."""
78
+ # pylint: disable=import-outside-toplevel
79
+ from sky import core
80
+
81
+ logger.info('=== Refreshing cluster status ===')
82
+ # This periodically refresh will hold the lock for the cluster being
83
+ # refreshed, but it is OK because other operations will just wait for
84
+ # the lock and get the just refreshed status without refreshing again.
85
+ core.status(refresh=common.StatusRefreshMode.FORCE, all_users=True)
86
+ logger.info('Status refreshed. Sleeping '
87
+ f'{server_constants.CLUSTER_REFRESH_DAEMON_INTERVAL_SECONDS}'
88
+ ' seconds for the next refresh...\n')
89
+ time.sleep(server_constants.CLUSTER_REFRESH_DAEMON_INTERVAL_SECONDS)
90
+
91
+
92
+ def refresh_volume_status_event():
93
+ """Periodically refresh the volume status."""
94
+ # pylint: disable=import-outside-toplevel
95
+ from sky.volumes.server import core
96
+
97
+ # Disable logging for periodic refresh to avoid the usage message being
98
+ # sent multiple times.
99
+ os.environ[env_options.Options.DISABLE_LOGGING.env_key] = '1'
100
+
101
+ logger.info('=== Refreshing volume status ===')
102
+ core.volume_refresh()
103
+ logger.info('Volume status refreshed. Sleeping '
104
+ f'{server_constants.VOLUME_REFRESH_DAEMON_INTERVAL_SECONDS}'
105
+ ' seconds for the next refresh...\n')
106
+ time.sleep(server_constants.VOLUME_REFRESH_DAEMON_INTERVAL_SECONDS)
107
+
108
+
109
+ def managed_job_status_refresh_event():
110
+ """Refresh the managed job status for controller consolidation mode."""
111
+ # pylint: disable=import-outside-toplevel
112
+ from sky.jobs import utils as managed_job_utils
113
+ if not managed_job_utils.is_consolidation_mode():
114
+ return
115
+ # We run the recovery logic before starting the event loop as those two are
116
+ # conflicting. Check PERSISTENT_RUN_RESTARTING_SIGNAL_FILE for details.
117
+ from sky.utils import controller_utils
118
+ if controller_utils.high_availability_specified(
119
+ controller_utils.Controllers.JOBS_CONTROLLER.value.cluster_name):
120
+ managed_job_utils.ha_recovery_for_consolidation_mode()
121
+ # After recovery, we start the event loop.
122
+ from sky.skylet import events
123
+ refresh_event = events.ManagedJobEvent()
124
+ scheduling_event = events.ManagedJobSchedulingEvent()
125
+ logger.info('=== Running managed job event ===')
126
+ refresh_event.run()
127
+ scheduling_event.run()
128
+ time.sleep(events.EVENT_CHECKING_INTERVAL_SECONDS)
129
+
130
+
131
+ def sky_serve_status_refresh_event():
132
+ """Refresh the sky serve status for controller consolidation mode."""
133
+ # pylint: disable=import-outside-toplevel
134
+ from sky.serve import serve_utils
135
+ if not serve_utils.is_consolidation_mode():
136
+ return
137
+ # TODO(tian): Add HA recovery logic.
138
+ from sky.skylet import events
139
+ event = events.ServiceUpdateEvent()
140
+ logger.info('=== Running serve status refresh event ===')
141
+ event.run()
142
+ time.sleep(events.EVENT_CHECKING_INTERVAL_SECONDS)
143
+
144
+
145
+ # Register the events to run in the background.
146
+ INTERNAL_REQUEST_DAEMONS = [
147
+ # This status refresh daemon can cause the autostopp'ed/autodown'ed cluster
148
+ # set to updated status automatically, without showing users the hint of
149
+ # cluster being stopped or down when `sky status -r` is called.
150
+ InternalRequestDaemon(id='skypilot-status-refresh-daemon',
151
+ name='status',
152
+ event_fn=refresh_cluster_status_event,
153
+ default_log_level='DEBUG'),
154
+ # Volume status refresh daemon to update the volume status periodically.
155
+ InternalRequestDaemon(id='skypilot-volume-status-refresh-daemon',
156
+ name='volume',
157
+ event_fn=refresh_volume_status_event),
158
+ InternalRequestDaemon(id='managed-job-status-refresh-daemon',
159
+ name='managed-job-status',
160
+ event_fn=managed_job_status_refresh_event),
161
+ InternalRequestDaemon(id='sky-serve-status-refresh-daemon',
162
+ name='sky-serve-status',
163
+ event_fn=sky_serve_status_refresh_event),
164
+ ]
@@ -24,12 +24,11 @@ from sky import sky_logging
24
24
  from sky import skypilot_config
25
25
  from sky.server import common as server_common
26
26
  from sky.server import constants as server_constants
27
+ from sky.server import daemons
27
28
  from sky.server.requests import payloads
28
29
  from sky.server.requests.serializers import decoders
29
30
  from sky.server.requests.serializers import encoders
30
- from sky.utils import common
31
31
  from sky.utils import common_utils
32
- from sky.utils import env_options
33
32
  from sky.utils import subprocess_utils
34
33
  from sky.utils import ux_utils
35
34
  from sky.utils.db import db_utils
@@ -307,127 +306,6 @@ def kill_cluster_requests(cluster_name: str, exclude_request_name: str):
307
306
  kill_requests(request_ids)
308
307
 
309
308
 
310
- def refresh_cluster_status_event():
311
- """Periodically refresh the cluster status."""
312
- # pylint: disable=import-outside-toplevel
313
- from sky import core
314
-
315
- # Disable logging for periodic refresh to avoid the usage message being
316
- # sent multiple times.
317
- os.environ[env_options.Options.DISABLE_LOGGING.env_key] = '1'
318
-
319
- while True:
320
- logger.info('=== Refreshing cluster status ===')
321
- # This periodically refresh will hold the lock for the cluster being
322
- # refreshed, but it is OK because other operations will just wait for
323
- # the lock and get the just refreshed status without refreshing again.
324
- core.status(refresh=common.StatusRefreshMode.FORCE, all_users=True)
325
- logger.info(
326
- 'Status refreshed. Sleeping '
327
- f'{server_constants.CLUSTER_REFRESH_DAEMON_INTERVAL_SECONDS}'
328
- ' seconds for the next refresh...\n')
329
- time.sleep(server_constants.CLUSTER_REFRESH_DAEMON_INTERVAL_SECONDS)
330
-
331
-
332
- def refresh_volume_status_event():
333
- """Periodically refresh the volume status."""
334
- # pylint: disable=import-outside-toplevel
335
- from sky.volumes.server import core
336
-
337
- # Disable logging for periodic refresh to avoid the usage message being
338
- # sent multiple times.
339
- os.environ[env_options.Options.DISABLE_LOGGING.env_key] = '1'
340
-
341
- while True:
342
- logger.info('=== Refreshing volume status ===')
343
- core.volume_refresh()
344
- logger.info('Volume status refreshed. Sleeping '
345
- f'{server_constants.VOLUME_REFRESH_DAEMON_INTERVAL_SECONDS}'
346
- ' seconds for the next refresh...\n')
347
- time.sleep(server_constants.VOLUME_REFRESH_DAEMON_INTERVAL_SECONDS)
348
-
349
-
350
- def managed_job_status_refresh_event():
351
- """Refresh the managed job status for controller consolidation mode."""
352
- # pylint: disable=import-outside-toplevel
353
- from sky.jobs import utils as managed_job_utils
354
- if not managed_job_utils.is_consolidation_mode():
355
- return
356
- # We run the recovery logic before starting the event loop as those two are
357
- # conflicting. Check PERSISTENT_RUN_RESTARTING_SIGNAL_FILE for details.
358
- from sky.utils import controller_utils
359
- if controller_utils.high_availability_specified(
360
- controller_utils.Controllers.JOBS_CONTROLLER.value.cluster_name):
361
- managed_job_utils.ha_recovery_for_consolidation_mode()
362
- # After recovery, we start the event loop.
363
- from sky.skylet import events
364
- refresh_event = events.ManagedJobEvent()
365
- scheduling_event = events.ManagedJobSchedulingEvent()
366
- while True:
367
- logger.info('=== Running managed job event ===')
368
- refresh_event.run()
369
- scheduling_event.run()
370
- time.sleep(events.EVENT_CHECKING_INTERVAL_SECONDS)
371
-
372
-
373
- def sky_serve_status_refresh_event():
374
- """Refresh the managed job status for controller consolidation mode."""
375
- # pylint: disable=import-outside-toplevel
376
- from sky.serve import serve_utils
377
- if not serve_utils.is_consolidation_mode():
378
- return
379
- # TODO(tian): Add HA recovery logic.
380
- from sky.skylet import events
381
- event = events.ServiceUpdateEvent()
382
- while True:
383
- time.sleep(events.EVENT_CHECKING_INTERVAL_SECONDS)
384
- event.run()
385
-
386
-
387
- @dataclasses.dataclass
388
- class InternalRequestDaemon:
389
- """Internal daemon that runs an event in the background."""
390
-
391
- id: str
392
- name: str
393
- event_fn: Callable[[], None]
394
-
395
- def run_event(self):
396
- """Run the event."""
397
- while True:
398
- with ux_utils.enable_traceback():
399
- try:
400
- self.event_fn()
401
- break
402
- except Exception: # pylint: disable=broad-except
403
- # It is OK to fail to run the event, as the event is not
404
- # critical, but we should log the error.
405
- logger.exception(
406
- f'Error running {self.name} event. '
407
- f'Restarting in '
408
- f'{server_constants.DAEMON_RESTART_INTERVAL_SECONDS} '
409
- 'seconds...')
410
- time.sleep(server_constants.DAEMON_RESTART_INTERVAL_SECONDS)
411
-
412
-
413
- # Register the events to run in the background.
414
- INTERNAL_REQUEST_DAEMONS = [
415
- # This status refresh daemon can cause the autostopp'ed/autodown'ed cluster
416
- # set to updated status automatically, without showing users the hint of
417
- # cluster being stopped or down when `sky status -r` is called.
418
- InternalRequestDaemon(id='skypilot-status-refresh-daemon',
419
- name='status',
420
- event_fn=refresh_cluster_status_event),
421
- # Volume status refresh daemon to update the volume status periodically.
422
- InternalRequestDaemon(id='skypilot-volume-status-refresh-daemon',
423
- name='volume',
424
- event_fn=refresh_volume_status_event),
425
- InternalRequestDaemon(id='managed-job-status-refresh-daemon',
426
- name='managed-job-status',
427
- event_fn=managed_job_status_refresh_event),
428
- ]
429
-
430
-
431
309
  def kill_requests(request_ids: Optional[List[str]] = None,
432
310
  user_id: Optional[str] = None) -> List[str]:
433
311
  """Kill a SkyPilot API request and set its status to cancelled.
@@ -458,7 +336,7 @@ def kill_requests(request_ids: Optional[List[str]] = None,
458
336
  # Skip internal requests. The internal requests are scheduled with
459
337
  # request_id in range(len(INTERNAL_REQUEST_EVENTS)).
460
338
  if request_record.request_id in set(
461
- event.id for event in INTERNAL_REQUEST_DAEMONS):
339
+ event.id for event in daemons.INTERNAL_REQUEST_DAEMONS):
462
340
  continue
463
341
  if request_record.status > RequestStatus.RUNNING:
464
342
  logger.debug(f'Request {request_id} already finished')
sky/server/server.py CHANGED
@@ -46,6 +46,7 @@ from sky.serve.server import server as serve_rest
46
46
  from sky.server import common
47
47
  from sky.server import config as server_config
48
48
  from sky.server import constants as server_constants
49
+ from sky.server import daemons
49
50
  from sky.server import metrics
50
51
  from sky.server import state
51
52
  from sky.server import stream_utils
@@ -482,7 +483,7 @@ async def lifespan(app: fastapi.FastAPI): # pylint: disable=redefined-outer-nam
482
483
  """FastAPI lifespan context manager."""
483
484
  del app # unused
484
485
  # Startup: Run background tasks
485
- for event in requests_lib.INTERNAL_REQUEST_DAEMONS:
486
+ for event in daemons.INTERNAL_REQUEST_DAEMONS:
486
487
  try:
487
488
  executor.schedule_request(
488
489
  request_id=event.id,
sky/server/uvicorn.py CHANGED
@@ -16,6 +16,7 @@ import uvicorn
16
16
  from uvicorn.supervisors import multiprocess
17
17
 
18
18
  from sky import sky_logging
19
+ from sky.server import daemons
19
20
  from sky.server import state
20
21
  from sky.server.requests import requests as requests_lib
21
22
  from sky.skylet import constants
@@ -120,7 +121,7 @@ class Server(uvicorn.Server):
120
121
  # Proactively cancel internal requests and logs requests since
121
122
  # they can run for infinite time.
122
123
  internal_request_ids = [
123
- d.id for d in requests_lib.INTERNAL_REQUEST_DAEMONS
124
+ d.id for d in daemons.INTERNAL_REQUEST_DAEMONS
124
125
  ]
125
126
  if time.time() - start_time > _WAIT_REQUESTS_TIMEOUT_SECONDS:
126
127
  logger.warning('Timeout waiting for on-going requests to '
sky/sky_logging.py CHANGED
@@ -171,6 +171,36 @@ def set_logging_level(logger: str, level: int):
171
171
  logger.setLevel(original_level)
172
172
 
173
173
 
174
+ @contextlib.contextmanager
175
+ def set_sky_logging_levels(level: int):
176
+ """Set the logging level for all loggers."""
177
+ # Turn off logger
178
+ previous_levels = {}
179
+ for logger_name in logging.Logger.manager.loggerDict:
180
+ if logger_name.startswith('sky'):
181
+ logger = logging.getLogger(logger_name)
182
+ previous_levels[logger_name] = logger.level
183
+ logger.setLevel(level)
184
+ if level == logging.DEBUG:
185
+ previous_show_debug_info = env_options.Options.SHOW_DEBUG_INFO.get()
186
+ os.environ[env_options.Options.SHOW_DEBUG_INFO.env_key] = '1'
187
+ try:
188
+ yield
189
+ finally:
190
+ # Restore logger
191
+ for logger_name in logging.Logger.manager.loggerDict:
192
+ if logger_name.startswith('sky'):
193
+ logger = logging.getLogger(logger_name)
194
+ try:
195
+ logger.setLevel(previous_levels[logger_name])
196
+ except KeyError:
197
+ # New loggers maybe initialized after the context manager,
198
+ # no need to restore the level.
199
+ pass
200
+ if level == logging.DEBUG and not previous_show_debug_info:
201
+ os.environ.pop(env_options.Options.SHOW_DEBUG_INFO.env_key)
202
+
203
+
174
204
  def logging_enabled(logger: logging.Logger, level: int) -> bool:
175
205
  return logger.level <= level
176
206
 
sky/skylet/constants.py CHANGED
@@ -382,7 +382,8 @@ OVERRIDEABLE_CONFIG_KEYS_IN_TASK: List[Tuple[str, ...]] = [
382
382
  # we skip the following keys because they are meant to be client-side configs.
383
383
  SKIPPED_CLIENT_OVERRIDE_KEYS: List[Tuple[str, ...]] = [('api_server',),
384
384
  ('allowed_clouds',),
385
- ('workspaces',), ('db',)]
385
+ ('workspaces',), ('db',),
386
+ ('daemons',)]
386
387
 
387
388
  # Constants for Azure blob storage
388
389
  WAIT_FOR_STORAGE_ACCOUNT_CREATION = 60
sky/utils/schemas.py CHANGED
@@ -1136,6 +1136,7 @@ _CONTEXT_CONFIG_SCHEMA_KUBERNETES = {
1136
1136
 
1137
1137
  def get_config_schema():
1138
1138
  # pylint: disable=import-outside-toplevel
1139
+ from sky.server import daemons
1139
1140
 
1140
1141
  resources_schema = {
1141
1142
  k: v
@@ -1479,6 +1480,27 @@ def get_config_schema():
1479
1480
  }
1480
1481
  }
1481
1482
 
1483
+ daemon_config = {
1484
+ 'type': 'object',
1485
+ 'required': [],
1486
+ 'properties': {
1487
+ 'log_level': {
1488
+ 'type': 'string',
1489
+ 'case_insensitive_enum': ['DEBUG', 'INFO', 'WARNING'],
1490
+ },
1491
+ }
1492
+ }
1493
+
1494
+ daemon_schema = {
1495
+ 'type': 'object',
1496
+ 'required': [],
1497
+ 'additionalProperties': False,
1498
+ 'properties': {}
1499
+ }
1500
+
1501
+ for daemon in daemons.INTERNAL_REQUEST_DAEMONS:
1502
+ daemon_schema['properties'][daemon.id] = daemon_config
1503
+
1482
1504
  api_server = {
1483
1505
  'type': 'object',
1484
1506
  'required': [],
@@ -1724,6 +1746,7 @@ def get_config_schema():
1724
1746
  'provision': provision_configs,
1725
1747
  'rbac': rbac_schema,
1726
1748
  'logs': logs_schema,
1749
+ 'daemons': daemon_schema,
1727
1750
  **cloud_configs,
1728
1751
  },
1729
1752
  }
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: skypilot-nightly
3
- Version: 1.0.0.dev20250731
3
+ Version: 1.0.0.dev20250801
4
4
  Summary: SkyPilot: Run AI on Any Infra — Unified, Faster, Cheaper.
5
5
  Author: SkyPilot Team
6
6
  License: Apache 2.0
@@ -1,4 +1,4 @@
1
- sky/__init__.py,sha256=lrsHzbL8habq58UvILoKMP-CKVI9MM3nqS5wcZuqxyM,6535
1
+ sky/__init__.py,sha256=F0tvtPN6QILWTtxIxztTsz0w2Sq2YXfeFwr80Rp0_eg,6535
2
2
  sky/admin_policy.py,sha256=BeSowGnWfDj58ALiNf3cc2N4gMQWzjO6aXnX7vaqYhk,9782
3
3
  sky/authentication.py,sha256=V7zGSV7bqcAKC_EGOOS0KhJ01ZFLnme0WnjLFO7zavs,25603
4
4
  sky/check.py,sha256=R0pFsTq2v-wr3NFePlX9DmDhsbvWEoFJAXsys3pUmT4,30338
@@ -13,7 +13,7 @@ sky/models.py,sha256=Eor-cT4D71QTimogcnJ5ey1G1PXK-OXN-snEtE8Uu_g,3152
13
13
  sky/optimizer.py,sha256=rcH6CVix1PJWWSwe1XWItfsmG8igwbKtRE5QVWRlpR4,63804
14
14
  sky/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
15
15
  sky/resources.py,sha256=y8_t61VOR5JHymkbohNDPMZEs4WUHy9ISC8_6IBey9w,106249
16
- sky/sky_logging.py,sha256=cMurxhFExKEFX1frcMR71Ti_s9Obg9WY30veVxsZB6o,7285
16
+ sky/sky_logging.py,sha256=aFcwYKKlZG28q-bEsVzvmBEZ1WqHMMp1SwRGONLopDI,8512
17
17
  sky/skypilot_config.py,sha256=KesPrzq4m07mqPrVIphLnT2qyS4mrxh3-FKbpjOXDu8,36817
18
18
  sky/task.py,sha256=d7387AOvuaCHadUVN6bXKGxkgMDtBaIYiw7bPv6InXk,73739
19
19
  sky/adaptors/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -82,7 +82,7 @@ sky/client/sdk.py,sha256=1KIBayflVwL0sVoCj8IP5W75cwT-YEEdpJnglYLaQ98,92749
82
82
  sky/client/sdk.pyi,sha256=Dyu9wBaCZmB3O_pg7q0pHe6i1aVrNFX73eGSdLAm_W8,8082
83
83
  sky/client/service_account_auth.py,sha256=5jXk0G6ufuW-SHCO7BEHQeTO0_2a8KfFmA63auXFRj4,1529
84
84
  sky/client/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
85
- sky/client/cli/command.py,sha256=B7b9GGtuk5pBdjdlRZ6G6hMHry6LtZtRpDRa8fhnvBU,238285
85
+ sky/client/cli/command.py,sha256=uhKBK8VVjLQxlKtvEkAvANdSIflRZxCl7HfH0m2_7zQ,238465
86
86
  sky/client/cli/deprecation_utils.py,sha256=H_d5UyF2CekEoThduAzt5cihBO8hwKYMu0-Wqfbjv5E,3370
87
87
  sky/client/cli/flags.py,sha256=6IdS_G2lB1C6r8kJMzLVREY_qV50VHiSfWlmppVrWuc,11623
88
88
  sky/client/cli/git.py,sha256=dqSaJI1Ndv6RfKJa6HT6ednXr0j_pVlwSdh3XiQzB60,22018
@@ -112,17 +112,17 @@ sky/clouds/utils/azure_utils.py,sha256=NToRBnhEyuUvb-nBnsKTxjhOBRkMcrelL8LK4w6s4
112
112
  sky/clouds/utils/gcp_utils.py,sha256=09MF4Vx0EW7S-GXGpyxpl2aQlHrqeu9ioV0nyionAyk,9890
113
113
  sky/clouds/utils/oci_utils.py,sha256=TFqAqRLggg4Z0bhxrrq8nouSSomZy-ub1frHXEkud2M,7302
114
114
  sky/clouds/utils/scp_utils.py,sha256=VGuccVO5uFGr8-yolWSoYrgr11z6cIeDBGcqkBzAyOs,18409
115
- sky/dashboard/out/404.html,sha256=DivzigVd4hnSeNxVSy2aAtm7TAteRynnH7t-CNBgZMI,1423
116
- sky/dashboard/out/clusters.html,sha256=xsELq5grdlr_bj_cAQT_FQ_GygRH7JjC25w60yEIKK0,1418
117
- sky/dashboard/out/config.html,sha256=I7TfMYfScpGTZfvs07YvYcVg3JRvtBEILNsy8CqiRyQ,1414
115
+ sky/dashboard/out/404.html,sha256=nGHcdaIkr2Afmov79AkFX5JsPH53vwSTIF6EHB-U0Qk,1423
116
+ sky/dashboard/out/clusters.html,sha256=cStnNdU9iqDWom7gKJJZU4Ua4cDz_EDoT-_hJX6Wvdc,1418
117
+ sky/dashboard/out/config.html,sha256=826Eai4YvbO5Xcj-SbAnlGHZkrHTc4Y9AVSZZCRxpv4,1414
118
118
  sky/dashboard/out/favicon.ico,sha256=XilUZZglAl_1zRsg85QsbQgmQAzGPQjcUIJ-A3AzYn8,93590
119
- sky/dashboard/out/index.html,sha256=Fq4t0iHz0KB9OdEnnhzFpKHtf--SJJOhuk9mYp1zOM8,1407
120
- sky/dashboard/out/infra.html,sha256=F6McHDYv1yprx9ESMO8qcxO_HkIyQc6jArLDdXURAs0,1412
121
- sky/dashboard/out/jobs.html,sha256=VFCRkf0iUHXs5Yfo_TCsZj9wq31WaRLIIgBuuDQM4fU,1410
119
+ sky/dashboard/out/index.html,sha256=NI8htN6qUe4O8R8nAMS1zZcTasiUaNKi4K2aieruxF8,1407
120
+ sky/dashboard/out/infra.html,sha256=ypmbaPmbqRL8VpdjyMk8aZ_ypQGX0KgibWupeYHaDXI,1412
121
+ sky/dashboard/out/jobs.html,sha256=_KBh5YlE69pUzyqdfDC7yRkN_ds5hByX5VZuucFyeEE,1410
122
122
  sky/dashboard/out/skypilot.svg,sha256=c0iRtlfLlaUm2p0rG9NFmo5FN0Qhf3pq5Xph-AeMPJw,5064
123
- sky/dashboard/out/users.html,sha256=bWozAqA6p6G6UcoIveqLuEht5CJPOezBEpZiV8wK8r4,1412
124
- sky/dashboard/out/volumes.html,sha256=hoSMNdzd_12l9w9WOcdiBo_UnjmbE_k3JHa7UuOZxVM,1416
125
- sky/dashboard/out/workspaces.html,sha256=0dOltUoaB6nPBZuzQbJDOAmsNar3yRcpsU0JeUTD3bU,1422
123
+ sky/dashboard/out/users.html,sha256=qwDJzOvbSIjlFpzlEdPCJBmA0O-hRn3cBkEj05aICKk,1412
124
+ sky/dashboard/out/volumes.html,sha256=cAkSnrwnE_13ousS9vMXybWVvkqFk_CpUuECVaXUdvU,1416
125
+ sky/dashboard/out/workspaces.html,sha256=7NvCPwqIdfDyN3N-T6h20JhcYbH2febNYyF5kFfs5Xw,1422
126
126
  sky/dashboard/out/_next/static/chunks/1043-928582d4860fef92.js,sha256=BG7QXJfWCVid6a34fciR3aLMlAfaMwz__pMPGx5W4yI,18356
127
127
  sky/dashboard/out/_next/static/chunks/1141-3f10a5a9f697c630.js,sha256=UYaip6NbdI5m6d7e2swueEq41Limnaf83CFxBG5V3qQ,17855
128
128
  sky/dashboard/out/_next/static/chunks/1272-1ef0bf0237faccdb.js,sha256=VJ6y-Z6Eg2T93hQIRfWAbjAkQ7nQhglmIaVbEpKSILY,38451
@@ -159,7 +159,7 @@ sky/dashboard/out/_next/static/chunks/framework-cf60a09ccd051a10.js,sha256=_Qbam
159
159
  sky/dashboard/out/_next/static/chunks/main-app-587214043926b3cc.js,sha256=t7glRfataAjNw691Wni-ZU4a3BsygRzPKoI8NOm-lsY,116244
160
160
  sky/dashboard/out/_next/static/chunks/main-f15ccb73239a3bf1.js,sha256=jxOPLDVX3rkMc_jvGx2a-N2v6mvfOa8O6V0o-sLT0tI,110208
161
161
  sky/dashboard/out/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js,sha256=6QPOwdWeAVe8x-SsiDrm-Ga6u2DkqgG5SFqglrlyIgA,91381
162
- sky/dashboard/out/_next/static/chunks/webpack-5adfc4d4b3db6f71.js,sha256=SbzT8WHIvyp7A5lK0DOYsfC2pqj0ZEP1JXIuiy2YgRM,4817
162
+ sky/dashboard/out/_next/static/chunks/webpack-42cd1b19a6b01078.js,sha256=3JIODwoPUZtSIv-AkN2MAIdAyXBF3B73OMXIDT00SFo,4817
163
163
  sky/dashboard/out/_next/static/chunks/pages/_app-a67ae198457b9886.js,sha256=VuhMqjrmagBFq3GFOQEolXA0EcCcTuJJ07YnYZSzIWE,95540
164
164
  sky/dashboard/out/_next/static/chunks/pages/_error-c66a4e8afc46f17b.js,sha256=vjERjtMAbVk-19LyPf1Jc-H6TMcrSznSz6brzNqbqf8,253
165
165
  sky/dashboard/out/_next/static/chunks/pages/clusters-956ad430075efee8.js,sha256=L7DO9OEherPXWbBVn5F4WRxWVsr4QkleQ72Cd2N9zS0,869
@@ -177,20 +177,20 @@ sky/dashboard/out/_next/static/chunks/pages/jobs/[job]-b25c109d6e41bcf4.js,sha25
177
177
  sky/dashboard/out/_next/static/chunks/pages/workspace/new-92f741084a89e27b.js,sha256=_R_LeVz9kCnCeOSjnJLSVmaKh2JVd1LpTVNZifss3d8,772
178
178
  sky/dashboard/out/_next/static/chunks/pages/workspaces/[name]-4d41c9023287f59a.js,sha256=BK6zNuC-5pUqmVKDlAgKs10P46xDefN_G3y-iLJ8TLw,1504
179
179
  sky/dashboard/out/_next/static/css/b3227360726f12eb.css,sha256=H55rkeVIrdGOUAIPmLZ6C78aEgXb7fEPa9mT9BOuLBI,55358
180
- sky/dashboard/out/_next/static/oKqDxFQ88cquF4nQGE_0w/_buildManifest.js,sha256=zY6CK5HuvlvHmmUpNplXXoAXlp-v9lwDL5uYSLg89qo,2283
181
- sky/dashboard/out/_next/static/oKqDxFQ88cquF4nQGE_0w/_ssgManifest.js,sha256=Z49s4suAsf5y_GfnQSvm4qtq2ggxEbZPfEDTXjy6XgA,80
182
- sky/dashboard/out/clusters/[cluster].html,sha256=Q2GYuJX6Sq7N5MnGpw8JDowmHDuYGDCuJxOBT2FA7lo,2936
183
- sky/dashboard/out/clusters/[cluster]/[job].html,sha256=1YErq9QspJckELsTB-sH2bS9y-Z1Rcl-ZH3BhVjMWDM,2161
184
- sky/dashboard/out/infra/[context].html,sha256=8aPM37WN4mW_UnzhaV0aUdCkaTadzMxVSSXbRGL3QhM,1436
185
- sky/dashboard/out/jobs/[job].html,sha256=l_-7UKiW484zyTj1QnWg80_WWDX8yGkF8Z6yU0wmg2w,2393
180
+ sky/dashboard/out/_next/static/f2fEsZwJxryJVOYRNtNKE/_buildManifest.js,sha256=zY6CK5HuvlvHmmUpNplXXoAXlp-v9lwDL5uYSLg89qo,2283
181
+ sky/dashboard/out/_next/static/f2fEsZwJxryJVOYRNtNKE/_ssgManifest.js,sha256=Z49s4suAsf5y_GfnQSvm4qtq2ggxEbZPfEDTXjy6XgA,80
182
+ sky/dashboard/out/clusters/[cluster].html,sha256=s0jXTCzpfJYGtcWDtYsLQmQwpj5SymD5Mcmatr_SXHs,2936
183
+ sky/dashboard/out/clusters/[cluster]/[job].html,sha256=eoSv3Z_TFgnLd7lSOn1b3UgCh9f6lmHdyzmIWMSakwo,2161
184
+ sky/dashboard/out/infra/[context].html,sha256=3t_gWZNUprUNPaQ7Rhss6tZukE9frSuQHyz16pND6YU,1436
185
+ sky/dashboard/out/jobs/[job].html,sha256=7xecnu85bcLXMzwEQExseEI9Ie4V0Okfl78DkpXzIvk,2393
186
186
  sky/dashboard/out/videos/cursor-small.mp4,sha256=8tRdp1vjawOrXUar1cfjOc-nkaKmcwCPZx_LO0XlCvQ,203285
187
- sky/dashboard/out/workspace/new.html,sha256=Qjx7dywsBWYwceSOtHv6YnX365xrKhuhO2fwOsoA_YQ,1428
188
- sky/dashboard/out/workspaces/[name].html,sha256=uPH2sjqRD6_l1zgjNoN7rfxRTvPalVhOdACpN8WpYXU,2846
187
+ sky/dashboard/out/workspace/new.html,sha256=iR1XHJ9AZM1LCjuj6-j3iPAAtErLqoPNJ9W0jeRcGMI,1428
188
+ sky/dashboard/out/workspaces/[name].html,sha256=MiMZhTKPWKGF3bbfRQtSDDEzq2XTBDHqxoYzsC10ZCA,2846
189
189
  sky/data/__init__.py,sha256=Nhaf1NURisXpZuwWANa2IuCyppIuc720FRwqSE2oEwY,184
190
190
  sky/data/data_transfer.py,sha256=N8b0CQebDuHieXjvEVwlYmK6DbQxUGG1RQJEyTbh3dU,12040
191
- sky/data/data_utils.py,sha256=4hmSXSokjop85liKaEg11a97E3R-Pl-hQcY6rf3uVQE,34233
191
+ sky/data/data_utils.py,sha256=AjEA_JRjo9NBMlv-Lq5iV4lBED_YZ1VqBR9pG6fGVWE,35179
192
192
  sky/data/mounting_utils.py,sha256=OduhvpNQuuqXc3VgDEpwnZI1gY6zDwZlx_sTJfvv5IY,24582
193
- sky/data/storage.py,sha256=OsgfyLX6kOvvhloJRHREFxOlMHYC3tWQh7WMg9cZ5NA,207415
193
+ sky/data/storage.py,sha256=Q3jwgbFZpkYQFyhK-edX61NsFaIY8o6ol-XvkHeaXcU,208135
194
194
  sky/data/storage_utils.py,sha256=l6sx0r3j0F2mTcIVn1S7-4Y_vFRZcvwsVrG_CCacVR8,13856
195
195
  sky/jobs/__init__.py,sha256=KrAmDhmfdE1G1kuHVpPs9kekzjNE_C3SWIoGQeQhjww,1587
196
196
  sky/jobs/constants.py,sha256=N7Bw_sSCL8cVd0NmKGXvAhyclR8Y-gJAair597umVo4,3305
@@ -283,7 +283,7 @@ sky/provision/paperspace/utils.py,sha256=FhJZz0O5tCbdaJ5WE6zTdVXvW6msalMaAc3xOR3
283
283
  sky/provision/runpod/__init__.py,sha256=6HYvHI27EaLrX1SS0vWVhdLu5HDBeZCdvAeDJuwM5pk,556
284
284
  sky/provision/runpod/config.py,sha256=9ulZJVL7nHuxhTdoj8D7lNn7SdicJ5zc6FIcHIG9tcg,321
285
285
  sky/provision/runpod/instance.py,sha256=tWE6J2G4uDGXGk3utcU-njETslu7rI57lWjgk3K7IbM,10218
286
- sky/provision/runpod/utils.py,sha256=zlilNbzKAYJIq-hlJZkjIbn1Wua8waNddESW5HmShP4,13236
286
+ sky/provision/runpod/utils.py,sha256=UcrlU4xcEfrAzg7Lu_DK0pdZ28RxAovwvZvEZElWmJ0,13792
287
287
  sky/provision/runpod/api/__init__.py,sha256=eJwjPeQZ5B7chf4-Bl4YeI2Uo9aLX4M1rr2NmPk89_E,112
288
288
  sky/provision/runpod/api/commands.py,sha256=oh77PS0H0wZudHV8II9ceRuaFQ8FN4NJ4S3-6_PeqPM,4238
289
289
  sky/provision/runpod/api/pods.py,sha256=GMwxgNr9NnHPfyh2Y9b8S_vLhrLY4h7LybFBBQNAyfw,4948
@@ -339,12 +339,13 @@ sky/server/__init__.py,sha256=MPPBqFzXz6Jv5QSk6td_IcvnfXfNErDZVcizu4MLRow,27
339
339
  sky/server/common.py,sha256=XRLjlT0zSivdLRukjAQyWrwCVC6Qo-GY3XUjJJRViYQ,35384
340
340
  sky/server/config.py,sha256=XWf5Kw4am6vMO5wcyWevbQAFH-dmKb7AMEgDzD083-M,8538
341
341
  sky/server/constants.py,sha256=phK3FjVyOQQYgokIYkyuXzQtqBRCLSu-KWPYBnkFHsc,2321
342
+ sky/server/daemons.py,sha256=Wd5c3WgsnCkFq3com5Fs_Tuh4Fh_P8PrNglloLMjh_8,6916
342
343
  sky/server/metrics.py,sha256=6H6n6dq_C5HMaU97mJlRUB9bqOEA_k205PO15wE3AWk,3648
343
344
  sky/server/rest.py,sha256=-oDsI8-NmIcb7aqy_8USB4lQbPWdQibST59GJVtFUi8,7983
344
- sky/server/server.py,sha256=iAROxp8MlaFObaO-exHqHpRLhIbNZfpXf2J57vAXGyk,73971
345
+ sky/server/server.py,sha256=r8OaXP8Pj5u54GhMe58gT_wAuicKzTDU86YJFiQRYjg,73997
345
346
  sky/server/state.py,sha256=YbVOMJ1JipQQv17gLIGyiGN7MKfnP83qlUa5MB1z0Yk,747
346
347
  sky/server/stream_utils.py,sha256=RS4RuMxQqTGqp3uxzZVtmFWzos4d49P7hMX_VklzEVU,9189
347
- sky/server/uvicorn.py,sha256=I-JUJwgUznt87hboDd66NTRaw0WtfFVzxxtoxowNqBg,9266
348
+ sky/server/uvicorn.py,sha256=7K-_Xge8EDWGqunqzSqPzGVBo5X1F8snKzWmzE2FdrY,9292
348
349
  sky/server/versions.py,sha256=3atZzUa7y1XeKNcrfVxKWAo_5ZyCOnbY7DKpIqed7Do,10011
349
350
  sky/server/html/log.html,sha256=TSGZktua9Ysl_ysg3w60rjxAxhH61AJnsYDHdtqrjmI,6929
350
351
  sky/server/html/token_page.html,sha256=eUndS5u1foL9vaWGPRTLMt7lCzD1g0wYJ2v_EeeFzlc,7046
@@ -354,7 +355,7 @@ sky/server/requests/executor.py,sha256=_BaE4QDTowLyaSyWCFVX_GqfrHknNRWuBexpDPMEd
354
355
  sky/server/requests/payloads.py,sha256=f-apQJvWlbknl3QqpbCo1AklVKkqPiV6u8sx5p_iSRA,25160
355
356
  sky/server/requests/preconditions.py,sha256=uUQjzFFHf7O5-WvBypMzqViGmd1CXksbqrrDPmY_s_Y,7178
356
357
  sky/server/requests/process.py,sha256=UpJp5rZizNMFRCNRtudFSjbcJhFarFbtAGDWI9x_ZyE,13197
357
- sky/server/requests/requests.py,sha256=iKbtaL6my2n5ZGEUbHcuzUPWVbhu5jGrqIV7JHO3ZRw,29308
358
+ sky/server/requests/requests.py,sha256=-A399p-xVwGCA63qUvur7gI1qtDJPwo_bRbagjr3L1o,24219
358
359
  sky/server/requests/queues/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
359
360
  sky/server/requests/queues/local_queue.py,sha256=X6VkBiUmgd_kfqIK1hCtMWG1b8GiZbY70TBiBR6c6GY,416
360
361
  sky/server/requests/queues/mp_queue.py,sha256=jDqP4Jd28U3ibSFyMR1DF9I2OWZrPZqFJrG5S6RFpyw,3403
@@ -370,7 +371,7 @@ sky/skylet/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
370
371
  sky/skylet/attempt_skylet.py,sha256=GZ6ITjjA0m-da3IxXXfoHR6n4pjp3X3TOXUqVvSrV0k,2136
371
372
  sky/skylet/autostop_lib.py,sha256=kGUnHm-jpF4zl3UJfB-4pnoldWpnVeR96WwYGSw7em0,4630
372
373
  sky/skylet/configs.py,sha256=nNBnpuzoU696FbC3Nv0qKVSDuTw4GAbr7eCcg0_Sldo,2135
373
- sky/skylet/constants.py,sha256=q0TQ39iqv9rMJ41QfefrW5eVQqCfyWPggX9D-uS28pQ,23580
374
+ sky/skylet/constants.py,sha256=NszY93-WPXneYKpZFe04KG5M3RuNXF1ObMtVMASDtho,23649
374
375
  sky/skylet/events.py,sha256=UwO_9tktq99RON3TuB4FmUZi1Fes7XvJssCcdhUebq0,13007
375
376
  sky/skylet/job_lib.py,sha256=cUud2sVcnHcZbqzHYGpiBy7EKSIphX8SqWg5Rsh-Su4,49533
376
377
  sky/skylet/log_lib.py,sha256=-kfeSNb7gR7Z-G7ADHh9Na4_QO-T0o2WzYYhcrrHSIE,23349
@@ -458,7 +459,7 @@ sky/utils/resource_checker.py,sha256=N18XhoVIqjY1VzmKvxQxRchRgC2WIgcEQyHDkLvg4Y8
458
459
  sky/utils/resources_utils.py,sha256=zcJXHYQt6WtQHKuWEif1QP1NtSO7XQYJBaEs625yV1Y,15958
459
460
  sky/utils/rich_console_utils.py,sha256=wPvAlshaFHuMZSjiDnaK3OSBppZLBjAn-lj7AvxNBQk,553
460
461
  sky/utils/rich_utils.py,sha256=iR6Gf8ZewE9sut4uhkmZwtEelzm3FvckM9K41meQnWM,14650
461
- sky/utils/schemas.py,sha256=58fdEQnwsvhZMSA-Ag-XChS63CDoC0XDRTNDcKk0nFU,55308
462
+ sky/utils/schemas.py,sha256=t9P9-Up7LrxvSeRKY-RWgXZ0ryk7NAdLienJ_HKQCjE,55900
462
463
  sky/utils/status_lib.py,sha256=QGkd6COD1GX1h30Mk9RMUdyeUOMJs5971GkxTcFgdsU,1705
463
464
  sky/utils/subprocess_utils.py,sha256=tOpFY_1ml7JkVGAN1o473lcKPklGR95qBCW61eu8kEo,15773
464
465
  sky/utils/tempstore.py,sha256=3S5fJ3UjnE12ve38c3MpTXpoRWfDSGndZpqNe7P_8aU,2148
@@ -502,9 +503,9 @@ sky/workspaces/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
502
503
  sky/workspaces/core.py,sha256=MkQoVqWN67tf4VRq284U9vgAw4lwb_cpUfwHQT4V9Ow,16598
503
504
  sky/workspaces/server.py,sha256=Box45DS54xXGHy7I3tGKGy-JP0a8G_z6IhfvGlEXtsA,3439
504
505
  sky/workspaces/utils.py,sha256=IIAiFoS6sdb2t0X5YoX9AietpTanZUQNTK8cePun-sY,2143
505
- skypilot_nightly-1.0.0.dev20250731.dist-info/licenses/LICENSE,sha256=emRJAvE7ngL6x0RhQvlns5wJzGI3NEQ_WMjNmd9TZc4,12170
506
- skypilot_nightly-1.0.0.dev20250731.dist-info/METADATA,sha256=fwaoSsor1n1H9f62iOGs6Mwd4FdhcX6kH87cx86HIkE,19691
507
- skypilot_nightly-1.0.0.dev20250731.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
508
- skypilot_nightly-1.0.0.dev20250731.dist-info/entry_points.txt,sha256=StA6HYpuHj-Y61L2Ze-hK2IcLWgLZcML5gJu8cs6nU4,36
509
- skypilot_nightly-1.0.0.dev20250731.dist-info/top_level.txt,sha256=qA8QuiNNb6Y1OF-pCUtPEr6sLEwy2xJX06Bd_CrtrHY,4
510
- skypilot_nightly-1.0.0.dev20250731.dist-info/RECORD,,
506
+ skypilot_nightly-1.0.0.dev20250801.dist-info/licenses/LICENSE,sha256=emRJAvE7ngL6x0RhQvlns5wJzGI3NEQ_WMjNmd9TZc4,12170
507
+ skypilot_nightly-1.0.0.dev20250801.dist-info/METADATA,sha256=IgisD5xNyhY8McBlID1LbiJeO_qyGrIvQFbZRBPEX3I,19691
508
+ skypilot_nightly-1.0.0.dev20250801.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
509
+ skypilot_nightly-1.0.0.dev20250801.dist-info/entry_points.txt,sha256=StA6HYpuHj-Y61L2Ze-hK2IcLWgLZcML5gJu8cs6nU4,36
510
+ skypilot_nightly-1.0.0.dev20250801.dist-info/top_level.txt,sha256=qA8QuiNNb6Y1OF-pCUtPEr6sLEwy2xJX06Bd_CrtrHY,4
511
+ skypilot_nightly-1.0.0.dev20250801.dist-info/RECORD,,