skypilot-nightly 1.0.0.dev20251021__py3-none-any.whl → 1.0.0.dev20251023__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 (93) hide show
  1. sky/__init__.py +2 -2
  2. sky/adaptors/kubernetes.py +5 -2
  3. sky/client/cli/command.py +118 -30
  4. sky/client/cli/table_utils.py +14 -8
  5. sky/dashboard/out/404.html +1 -1
  6. sky/dashboard/out/_next/static/CJlKj9Z9fXGlQCmH4EpLX/_buildManifest.js +1 -0
  7. sky/dashboard/out/_next/static/chunks/1141-ec6f902ffb865853.js +11 -0
  8. sky/dashboard/out/_next/static/chunks/1871-165dc0e1553d9822.js +6 -0
  9. sky/dashboard/out/_next/static/chunks/2755.1ffbda43f960962b.js +26 -0
  10. sky/dashboard/out/_next/static/chunks/3015-2dcace420c8939f4.js +1 -0
  11. sky/dashboard/out/_next/static/chunks/{3294.1fafbf42b3bcebff.js → 3294.27318ad826343ea6.js} +1 -1
  12. sky/dashboard/out/_next/static/chunks/{3785.a19328ba41517b8b.js → 3785.483a3dda2d52f26e.js} +1 -1
  13. sky/dashboard/out/_next/static/chunks/{1121-d0782b9251f0fcd3.js → 4282-d2f3ef2fbf78e347.js} +1 -1
  14. sky/dashboard/out/_next/static/chunks/{4725.10f7a9a5d3ea8208.js → 4725.a830b5c9e7867c92.js} +1 -1
  15. sky/dashboard/out/_next/static/chunks/6856-5c94d394259cdb6e.js +1 -0
  16. sky/dashboard/out/_next/static/chunks/8969-0389e2cb52412db3.js +1 -0
  17. sky/dashboard/out/_next/static/chunks/9360.07d78b8552bc9d17.js +31 -0
  18. sky/dashboard/out/_next/static/chunks/pages/clusters/[cluster]/{[job]-8f058b0346db2aff.js → [job]-602eeead010ec1d6.js} +1 -1
  19. sky/dashboard/out/_next/static/chunks/pages/clusters/{[cluster]-477555ab7c0b13d8.js → [cluster]-18b334dedbd9f6f2.js} +1 -1
  20. sky/dashboard/out/_next/static/chunks/pages/{clusters-2f61f65487f6d8ff.js → clusters-57221ec2e4e01076.js} +1 -1
  21. sky/dashboard/out/_next/static/chunks/pages/infra/{[context]-553b8b5cb65e100b.js → [context]-44ce535a0a0ad4ec.js} +1 -1
  22. sky/dashboard/out/_next/static/chunks/pages/{infra-910a22500c50596f.js → infra-872e6a00165534f4.js} +1 -1
  23. sky/dashboard/out/_next/static/chunks/pages/{jobs-a35a9dc3c5ccd657.js → jobs-0dc34cf9a8710a9f.js} +1 -1
  24. sky/dashboard/out/_next/static/chunks/pages/{users-98d2ed979084162a.js → users-3a543725492fb896.js} +1 -1
  25. sky/dashboard/out/_next/static/chunks/pages/{volumes-835d14ba94808f79.js → volumes-d2af9d22e87cc4ba.js} +1 -1
  26. sky/dashboard/out/_next/static/chunks/pages/workspaces/{[name]-e8688c35c06f0ac5.js → [name]-9ad108cd67d16d96.js} +1 -1
  27. sky/dashboard/out/_next/static/chunks/pages/{workspaces-69c80d677d3c2949.js → workspaces-6fc994fa1ee6c6bf.js} +1 -1
  28. sky/dashboard/out/_next/static/chunks/webpack-434b7577d72c879b.js +1 -0
  29. sky/dashboard/out/clusters/[cluster]/[job].html +1 -1
  30. sky/dashboard/out/clusters/[cluster].html +1 -1
  31. sky/dashboard/out/clusters.html +1 -1
  32. sky/dashboard/out/config.html +1 -1
  33. sky/dashboard/out/index.html +1 -1
  34. sky/dashboard/out/infra/[context].html +1 -1
  35. sky/dashboard/out/infra.html +1 -1
  36. sky/dashboard/out/jobs/[job].html +1 -1
  37. sky/dashboard/out/jobs/pools/[pool].html +1 -1
  38. sky/dashboard/out/jobs.html +1 -1
  39. sky/dashboard/out/users.html +1 -1
  40. sky/dashboard/out/volumes.html +1 -1
  41. sky/dashboard/out/workspace/new.html +1 -1
  42. sky/dashboard/out/workspaces/[name].html +1 -1
  43. sky/dashboard/out/workspaces.html +1 -1
  44. sky/global_user_state.py +117 -17
  45. sky/jobs/client/sdk.py +28 -9
  46. sky/jobs/client/sdk_async.py +9 -3
  47. sky/jobs/constants.py +1 -1
  48. sky/jobs/server/core.py +7 -3
  49. sky/jobs/server/server.py +11 -11
  50. sky/jobs/state.py +307 -55
  51. sky/jobs/utils.py +281 -166
  52. sky/schemas/api/responses.py +2 -0
  53. sky/schemas/db/skypilot_config/001_initial_schema.py +30 -0
  54. sky/serve/server/server.py +7 -7
  55. sky/server/auth/oauth2_proxy.py +2 -5
  56. sky/server/common.py +1 -13
  57. sky/server/requests/executor.py +20 -20
  58. sky/server/requests/payloads.py +3 -0
  59. sky/server/requests/requests.py +51 -25
  60. sky/server/requests/serializers/decoders.py +23 -10
  61. sky/server/requests/serializers/encoders.py +5 -4
  62. sky/server/rest.py +35 -1
  63. sky/server/server.py +34 -34
  64. sky/setup_files/alembic.ini +4 -0
  65. sky/skylet/log_lib.py +8 -1
  66. sky/skylet/services.py +5 -5
  67. sky/skylet/subprocess_daemon.py +103 -29
  68. sky/skypilot_config.py +87 -75
  69. sky/ssh_node_pools/server.py +4 -4
  70. sky/users/permission.py +4 -0
  71. sky/utils/db/db_utils.py +32 -3
  72. sky/utils/db/migration_utils.py +7 -3
  73. sky/utils/subprocess_utils.py +13 -1
  74. sky/volumes/server/server.py +3 -3
  75. sky/workspaces/server.py +6 -6
  76. {skypilot_nightly-1.0.0.dev20251021.dist-info → skypilot_nightly-1.0.0.dev20251023.dist-info}/METADATA +36 -35
  77. {skypilot_nightly-1.0.0.dev20251021.dist-info → skypilot_nightly-1.0.0.dev20251023.dist-info}/RECORD +84 -83
  78. sky/dashboard/out/_next/static/chunks/1141-3b40c39626f99c89.js +0 -11
  79. sky/dashboard/out/_next/static/chunks/1871-49141c317f3a9020.js +0 -6
  80. sky/dashboard/out/_next/static/chunks/2755.97300e1362fe7c98.js +0 -26
  81. sky/dashboard/out/_next/static/chunks/3015-7e0e8f06bb2f881c.js +0 -1
  82. sky/dashboard/out/_next/static/chunks/6856-5fdc9b851a18acdb.js +0 -1
  83. sky/dashboard/out/_next/static/chunks/8969-66237729cdf9749e.js +0 -1
  84. sky/dashboard/out/_next/static/chunks/9360.71e83b2ddc844ec2.js +0 -31
  85. sky/dashboard/out/_next/static/chunks/webpack-66f23594d38c7f16.js +0 -1
  86. sky/dashboard/out/_next/static/jDc1PlRsl9Cc5FQUMLBu8/_buildManifest.js +0 -1
  87. /sky/dashboard/out/_next/static/{jDc1PlRsl9Cc5FQUMLBu8 → CJlKj9Z9fXGlQCmH4EpLX}/_ssgManifest.js +0 -0
  88. /sky/dashboard/out/_next/static/chunks/pages/jobs/{[job]-e5c9ce6a24fc0de4.js → [job]-8677af16befde039.js} +0 -0
  89. /sky/dashboard/out/_next/static/chunks/pages/jobs/pools/{[pool]-bc979970c247d8f3.js → [pool]-e020fd69dbe76cea.js} +0 -0
  90. {skypilot_nightly-1.0.0.dev20251021.dist-info → skypilot_nightly-1.0.0.dev20251023.dist-info}/WHEEL +0 -0
  91. {skypilot_nightly-1.0.0.dev20251021.dist-info → skypilot_nightly-1.0.0.dev20251023.dist-info}/entry_points.txt +0 -0
  92. {skypilot_nightly-1.0.0.dev20251021.dist-info → skypilot_nightly-1.0.0.dev20251023.dist-info}/licenses/LICENSE +0 -0
  93. {skypilot_nightly-1.0.0.dev20251021.dist-info → skypilot_nightly-1.0.0.dev20251023.dist-info}/top_level.txt +0 -0
@@ -1 +1 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[1233],{61803:function(e,n,t){(window.__NEXT_P=window.__NEXT_P||[]).push(["/infra/[context]",function(){return t(1200)}])},1200:function(e,n,t){"use strict";t.r(n),t.d(n,{default:function(){return o}});var r=t(85893);t(67294);var i=t(9008),s=t.n(i),u=t(5152);let c=t.n(u)()(()=>Promise.all([t.e(616),t.e(6130),t.e(5739),t.e(7411),t.e(4937),t.e(6989),t.e(3850),t.e(8969),t.e(6990),t.e(6135),t.e(1121),t.e(6856),t.e(3294)]).then(t.bind(t,53294)).then(e=>e.GPUs),{loadableGenerated:{webpack:()=>[53294]},ssr:!1});function o(){return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(s(),{children:(0,r.jsx)("title",{children:"Infra | SkyPilot Dashboard"})}),(0,r.jsx)(c,{})]})}},9008:function(e,n,t){e.exports=t(37219)}},function(e){e.O(0,[2888,9774,179],function(){return e(e.s=61803)}),_N_E=e.O()}]);
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[1233],{61803:function(e,n,t){(window.__NEXT_P=window.__NEXT_P||[]).push(["/infra/[context]",function(){return t(1200)}])},1200:function(e,n,t){"use strict";t.r(n),t.d(n,{default:function(){return o}});var r=t(85893);t(67294);var i=t(9008),s=t.n(i),u=t(5152);let c=t.n(u)()(()=>Promise.all([t.e(616),t.e(6130),t.e(5739),t.e(7411),t.e(4937),t.e(6989),t.e(3850),t.e(8969),t.e(6990),t.e(6135),t.e(4282),t.e(6856),t.e(3294)]).then(t.bind(t,53294)).then(e=>e.GPUs),{loadableGenerated:{webpack:()=>[53294]},ssr:!1});function o(){return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(s(),{children:(0,r.jsx)("title",{children:"Infra | SkyPilot Dashboard"})}),(0,r.jsx)(c,{})]})}},9008:function(e,n,t){e.exports=t(37219)}},function(e){e.O(0,[2888,9774,179],function(){return e(e.s=61803)}),_N_E=e.O()}]);
@@ -1 +1 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[1588],{56206:function(e,n,t){(window.__NEXT_P=window.__NEXT_P||[]).push(["/infra",function(){return t(89054)}])},89054:function(e,n,t){"use strict";t.r(n),t.d(n,{default:function(){return c}});var r=t(85893);t(67294);var i=t(9008),s=t.n(i),u=t(5152);let a=t.n(u)()(()=>Promise.all([t.e(616),t.e(6130),t.e(5739),t.e(7411),t.e(4937),t.e(6989),t.e(3850),t.e(8969),t.e(6990),t.e(6135),t.e(1121),t.e(6856),t.e(3294)]).then(t.bind(t,53294)).then(e=>e.GPUs),{loadableGenerated:{webpack:()=>[53294]},ssr:!1});function c(){return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(s(),{children:(0,r.jsx)("title",{children:"Infra | SkyPilot Dashboard"})}),(0,r.jsx)(a,{})]})}},9008:function(e,n,t){e.exports=t(37219)}},function(e){e.O(0,[2888,9774,179],function(){return e(e.s=56206)}),_N_E=e.O()}]);
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[1588],{56206:function(e,n,t){(window.__NEXT_P=window.__NEXT_P||[]).push(["/infra",function(){return t(89054)}])},89054:function(e,n,t){"use strict";t.r(n),t.d(n,{default:function(){return c}});var r=t(85893);t(67294);var i=t(9008),s=t.n(i),u=t(5152);let a=t.n(u)()(()=>Promise.all([t.e(616),t.e(6130),t.e(5739),t.e(7411),t.e(4937),t.e(6989),t.e(3850),t.e(8969),t.e(6990),t.e(6135),t.e(4282),t.e(6856),t.e(3294)]).then(t.bind(t,53294)).then(e=>e.GPUs),{loadableGenerated:{webpack:()=>[53294]},ssr:!1});function c(){return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(s(),{children:(0,r.jsx)("title",{children:"Infra | SkyPilot Dashboard"})}),(0,r.jsx)(a,{})]})}},9008:function(e,n,t){e.exports=t(37219)}},function(e){e.O(0,[2888,9774,179],function(){return e(e.s=56206)}),_N_E=e.O()}]);
@@ -1 +1 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[8142],{41446:function(e,n,t){(window.__NEXT_P=window.__NEXT_P||[]).push(["/jobs",function(){return t(48929)}])},48929:function(e,n,t){"use strict";t.r(n),t.d(n,{default:function(){return a}});var r=t(85893);t(67294);var s=t(9008),i=t.n(s),o=t(5152);let u=t.n(o)()(()=>Promise.all([t.e(616),t.e(6130),t.e(5739),t.e(7359),t.e(6989),t.e(3850),t.e(8969),t.e(6990),t.e(1121),t.e(6601),t.e(3015),t.e(8640)]).then(t.bind(t,23015)).then(e=>e.ManagedJobs),{loadableGenerated:{webpack:()=>[23015]},ssr:!1});function a(){return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(i(),{children:(0,r.jsx)("title",{children:"Managed Jobs | SkyPilot Dashboard"})}),(0,r.jsx)(u,{})]})}},9008:function(e,n,t){e.exports=t(37219)}},function(e){e.O(0,[2888,9774,179],function(){return e(e.s=41446)}),_N_E=e.O()}]);
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[8142],{41446:function(e,n,t){(window.__NEXT_P=window.__NEXT_P||[]).push(["/jobs",function(){return t(48929)}])},48929:function(e,n,t){"use strict";t.r(n),t.d(n,{default:function(){return a}});var r=t(85893);t(67294);var s=t(9008),i=t.n(s),o=t(5152);let u=t.n(o)()(()=>Promise.all([t.e(616),t.e(6130),t.e(5739),t.e(7359),t.e(6989),t.e(3850),t.e(8969),t.e(6990),t.e(4282),t.e(6601),t.e(3015),t.e(8640)]).then(t.bind(t,23015)).then(e=>e.ManagedJobs),{loadableGenerated:{webpack:()=>[23015]},ssr:!1});function a(){return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(i(),{children:(0,r.jsx)("title",{children:"Managed Jobs | SkyPilot Dashboard"})}),(0,r.jsx)(u,{})]})}},9008:function(e,n,t){e.exports=t(37219)}},function(e){e.O(0,[2888,9774,179],function(){return e(e.s=41446)}),_N_E=e.O()}]);
@@ -1 +1 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[2892],{7476:function(e,n,r){(window.__NEXT_P=window.__NEXT_P||[]).push(["/users",function(){return r(85126)}])},85126:function(e,n,r){"use strict";r.r(n),r.d(n,{default:function(){return o}});var t=r(85893);r(67294);var s=r(9008),u=r.n(s),i=r(5152);let c=r.n(i)()(()=>Promise.all([r.e(616),r.e(6130),r.e(5739),r.e(7411),r.e(7359),r.e(6989),r.e(3850),r.e(8969),r.e(6990),r.e(6135),r.e(1121),r.e(6601),r.e(3015),r.e(6856),r.e(2755)]).then(r.bind(r,27669)).then(e=>e.Users),{loadableGenerated:{webpack:()=>[27669]},ssr:!1});function o(){return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(u(),{children:(0,t.jsx)("title",{children:"Users | SkyPilot Dashboard"})}),(0,t.jsx)(c,{})]})}},9008:function(e,n,r){e.exports=r(37219)}},function(e){e.O(0,[2888,9774,179],function(){return e(e.s=7476)}),_N_E=e.O()}]);
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[2892],{7476:function(e,n,r){(window.__NEXT_P=window.__NEXT_P||[]).push(["/users",function(){return r(85126)}])},85126:function(e,n,r){"use strict";r.r(n),r.d(n,{default:function(){return o}});var t=r(85893);r(67294);var s=r(9008),u=r.n(s),i=r(5152);let c=r.n(i)()(()=>Promise.all([r.e(616),r.e(6130),r.e(5739),r.e(7411),r.e(7359),r.e(6989),r.e(3850),r.e(8969),r.e(6990),r.e(6135),r.e(4282),r.e(6601),r.e(3015),r.e(6856),r.e(2755)]).then(r.bind(r,27669)).then(e=>e.Users),{loadableGenerated:{webpack:()=>[27669]},ssr:!1});function o(){return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(u(),{children:(0,t.jsx)("title",{children:"Users | SkyPilot Dashboard"})}),(0,t.jsx)(c,{})]})}},9008:function(e,n,r){e.exports=r(37219)}},function(e){e.O(0,[2888,9774,179],function(){return e(e.s=7476)}),_N_E=e.O()}]);
@@ -1 +1 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[8144],{43969:function(e,n,t){(window.__NEXT_P=window.__NEXT_P||[]).push(["/volumes",function(){return t(32567)}])},32567:function(e,n,t){"use strict";t.r(n),t.d(n,{default:function(){return l}});var r=t(85893);t(67294);var u=t(9008),s=t.n(u),i=t(5152);let o=t.n(i)()(()=>Promise.all([t.e(616),t.e(6130),t.e(5739),t.e(9847),t.e(6989),t.e(3850),t.e(8969),t.e(6990),t.e(1121),t.e(6856),t.e(4725)]).then(t.bind(t,54725)).then(e=>e.Volumes),{loadableGenerated:{webpack:()=>[54725]},ssr:!1});function l(){return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(s(),{children:(0,r.jsx)("title",{children:"Volumes | SkyPilot Dashboard"})}),(0,r.jsx)(o,{})]})}},9008:function(e,n,t){e.exports=t(37219)}},function(e){e.O(0,[2888,9774,179],function(){return e(e.s=43969)}),_N_E=e.O()}]);
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[8144],{43969:function(e,n,t){(window.__NEXT_P=window.__NEXT_P||[]).push(["/volumes",function(){return t(32567)}])},32567:function(e,n,t){"use strict";t.r(n),t.d(n,{default:function(){return l}});var r=t(85893);t(67294);var u=t(9008),s=t.n(u),i=t(5152);let o=t.n(i)()(()=>Promise.all([t.e(616),t.e(6130),t.e(5739),t.e(9847),t.e(6989),t.e(3850),t.e(8969),t.e(6990),t.e(4282),t.e(6856),t.e(4725)]).then(t.bind(t,54725)).then(e=>e.Volumes),{loadableGenerated:{webpack:()=>[54725]},ssr:!1});function l(){return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(s(),{children:(0,r.jsx)("title",{children:"Volumes | SkyPilot Dashboard"})}),(0,r.jsx)(o,{})]})}},9008:function(e,n,t){e.exports=t(37219)}},function(e){e.O(0,[2888,9774,179],function(){return e(e.s=43969)}),_N_E=e.O()}]);
@@ -1 +1 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[6324],{77614:function(e,n,r){(window.__NEXT_P=window.__NEXT_P||[]).push(["/workspaces/[name]",function(){return r(59431)}])},59431:function(e,n,r){"use strict";r.r(n),r.d(n,{default:function(){return i}});var u=r(85893);r(67294);var t=r(11163),l=r(11141);function i(){let e=(0,t.useRouter)(),{name:n}=e.query;return e.isReady&&n?(0,u.jsx)(l.WorkspaceEditor,{workspaceName:n}):(0,u.jsx)("div",{children:"Loading..."})}},9008:function(e,n,r){e.exports=r(37219)},12003:function(e,n,r){"use strict";r.d(n,{j:function(){return i}});var u=r(90512);let t=e=>"boolean"==typeof e?`${e}`:0===e?"0":e,l=u.W,i=(e,n)=>r=>{var u;if((null==n?void 0:n.variants)==null)return l(e,null==r?void 0:r.class,null==r?void 0:r.className);let{variants:i,defaultVariants:s}=n,o=Object.keys(i).map(e=>{let n=null==r?void 0:r[e],u=null==s?void 0:s[e];if(null===n)return null;let l=t(n)||t(u);return i[e][l]}),a=r&&Object.entries(r).reduce((e,n)=>{let[r,u]=n;return void 0===u||(e[r]=u),e},{});return l(e,o,null==n?void 0:null===(u=n.compoundVariants)||void 0===u?void 0:u.reduce((e,n)=>{let{class:r,className:u,...t}=n;return Object.entries(t).every(e=>{let[n,r]=e;return Array.isArray(r)?r.includes({...s,...a}[n]):({...s,...a})[n]===r})?[...e,r,u]:e},[]),null==r?void 0:r.class,null==r?void 0:r.className)}}},function(e){e.O(0,[616,6130,5739,7411,1272,7359,6989,3850,8969,6990,6135,1121,6601,3015,1141,2888,9774,179],function(){return e(e.s=77614)}),_N_E=e.O()}]);
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[6324],{77614:function(e,n,r){(window.__NEXT_P=window.__NEXT_P||[]).push(["/workspaces/[name]",function(){return r(59431)}])},59431:function(e,n,r){"use strict";r.r(n),r.d(n,{default:function(){return i}});var u=r(85893);r(67294);var t=r(11163),l=r(11141);function i(){let e=(0,t.useRouter)(),{name:n}=e.query;return e.isReady&&n?(0,u.jsx)(l.WorkspaceEditor,{workspaceName:n}):(0,u.jsx)("div",{children:"Loading..."})}},9008:function(e,n,r){e.exports=r(37219)},12003:function(e,n,r){"use strict";r.d(n,{j:function(){return i}});var u=r(90512);let t=e=>"boolean"==typeof e?`${e}`:0===e?"0":e,l=u.W,i=(e,n)=>r=>{var u;if((null==n?void 0:n.variants)==null)return l(e,null==r?void 0:r.class,null==r?void 0:r.className);let{variants:i,defaultVariants:s}=n,o=Object.keys(i).map(e=>{let n=null==r?void 0:r[e],u=null==s?void 0:s[e];if(null===n)return null;let l=t(n)||t(u);return i[e][l]}),a=r&&Object.entries(r).reduce((e,n)=>{let[r,u]=n;return void 0===u||(e[r]=u),e},{});return l(e,o,null==n?void 0:null===(u=n.compoundVariants)||void 0===u?void 0:u.reduce((e,n)=>{let{class:r,className:u,...t}=n;return Object.entries(t).every(e=>{let[n,r]=e;return Array.isArray(r)?r.includes({...s,...a}[n]):({...s,...a})[n]===r})?[...e,r,u]:e},[]),null==r?void 0:r.class,null==r?void 0:r.className)}}},function(e){e.O(0,[616,6130,5739,7411,1272,7359,6989,3850,8969,6990,6135,4282,6601,3015,1141,2888,9774,179],function(){return e(e.s=77614)}),_N_E=e.O()}]);
@@ -1 +1 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[1590],{92592:function(e,n,r){(window.__NEXT_P=window.__NEXT_P||[]).push(["/workspaces",function(){return r(4980)}])},4980:function(e,n,r){"use strict";r.r(n),r.d(n,{default:function(){return u}});var t=r(85893);r(67294);var s=r(9008),c=r.n(s),i=r(5152);let o=r.n(i)()(()=>Promise.all([r.e(616),r.e(6130),r.e(5739),r.e(1272),r.e(7359),r.e(6989),r.e(3850),r.e(8969),r.e(6990),r.e(1121),r.e(6601),r.e(3015),r.e(6856),r.e(9360)]).then(r.bind(r,82077)).then(e=>e.Workspaces),{loadableGenerated:{webpack:()=>[82077]},ssr:!1});function u(){return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(c(),{children:(0,t.jsx)("title",{children:"Workspaces | SkyPilot Dashboard"})}),(0,t.jsx)(o,{})]})}},9008:function(e,n,r){e.exports=r(37219)}},function(e){e.O(0,[2888,9774,179],function(){return e(e.s=92592)}),_N_E=e.O()}]);
1
+ (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[1590],{92592:function(e,n,r){(window.__NEXT_P=window.__NEXT_P||[]).push(["/workspaces",function(){return r(4980)}])},4980:function(e,n,r){"use strict";r.r(n),r.d(n,{default:function(){return u}});var t=r(85893);r(67294);var s=r(9008),c=r.n(s),i=r(5152);let o=r.n(i)()(()=>Promise.all([r.e(616),r.e(6130),r.e(5739),r.e(1272),r.e(7359),r.e(6989),r.e(3850),r.e(8969),r.e(6990),r.e(4282),r.e(6601),r.e(3015),r.e(6856),r.e(9360)]).then(r.bind(r,82077)).then(e=>e.Workspaces),{loadableGenerated:{webpack:()=>[82077]},ssr:!1});function u(){return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(c(),{children:(0,t.jsx)("title",{children:"Workspaces | SkyPilot Dashboard"})}),(0,t.jsx)(o,{})]})}},9008:function(e,n,r){e.exports=r(37219)}},function(e){e.O(0,[2888,9774,179],function(){return e(e.s=92592)}),_N_E=e.O()}]);
@@ -0,0 +1 @@
1
+ !function(){"use strict";var e,t,n,r,c,o,u,i,f,a={},s={};function d(e){var t=s[e];if(void 0!==t)return t.exports;var n=s[e]={exports:{}},r=!0;try{a[e](n,n.exports,d),r=!1}finally{r&&delete s[e]}return n.exports}d.m=a,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,f=0;f<n.length;f++)u>=c&&Object.keys(d.O).every(function(e){return d.O[e](n[f])})?n.splice(f--,1):(i=!1,c<u&&(u=c));if(i){e.splice(o--,1);var a=r();void 0!==a&&(t=a)}}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.c12318fb6a1a9093.js":4937===e?"static/chunks/4937.a2baa2df5572a276.js":3294===e?"static/chunks/3294.27318ad826343ea6.js":8640===e?"static/chunks/8640.5b9475a2d18c5416.js":2755===e?"static/chunks/2755.1ffbda43f960962b.js":9847===e?"static/chunks/9847.3aaca6bb33455140.js":4725===e?"static/chunks/4725.a830b5c9e7867c92.js":3785===e?"static/chunks/3785.483a3dda2d52f26e.js":9360===e?"static/chunks/9360.07d78b8552bc9d17.js":"static/chunks/"+e+"-"+({616:"3d59f75e2ccf9321",1141:"ec6f902ffb865853",1272:"1ef0bf0237faccdb",1871:"165dc0e1553d9822",3015:"2dcace420c8939f4",3850:"ff4a9a69d978632b",4282:"d2f3ef2fbf78e347",5739:"d67458fcb1386c92",6130:"2be46d70a38f1e82",6135:"4b4d5e824b7f9d3c",6601:"06114c982db410b6",6856:"5c94d394259cdb6e",6989:"01359c57e018caa4",6990:"f6818c84ed8f1c86",7359:"c8d04e06886000b3",7411:"b15471acd2cba716",8969:"0389e2cb52412db3"})[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,f=document.getElementsByTagName("script"),a=0;a<f.length;a++){var s=f[a];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],f=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 a=i(d)}for(e&&e(t);f<c.length;f++)r=c[f],d.o(u,r)&&u[r]&&u[r][0](),u[r]=0;return d.O(a)},(f=self.webpackChunk_N_E=self.webpackChunk_N_E||[]).forEach(i.bind(null,0)),f.push=i.bind(null,f.push.bind(f)),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/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-66f23594d38c7f16.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/616-3d59f75e2ccf9321.js" defer=""></script><script src="/dashboard/_next/static/chunks/6130-2be46d70a38f1e82.js" defer=""></script><script src="/dashboard/_next/static/chunks/5739-d67458fcb1386c92.js" defer=""></script><script src="/dashboard/_next/static/chunks/7411-b15471acd2cba716.js" defer=""></script><script src="/dashboard/_next/static/chunks/6989-01359c57e018caa4.js" defer=""></script><script src="/dashboard/_next/static/chunks/3850-ff4a9a69d978632b.js" defer=""></script><script src="/dashboard/_next/static/chunks/6135-4b4d5e824b7f9d3c.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/clusters/%5Bcluster%5D/%5Bjob%5D-8f058b0346db2aff.js" defer=""></script><script src="/dashboard/_next/static/jDc1PlRsl9Cc5FQUMLBu8/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/jDc1PlRsl9Cc5FQUMLBu8/_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":"jDc1PlRsl9Cc5FQUMLBu8","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
1
+ <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-434b7577d72c879b.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/616-3d59f75e2ccf9321.js" defer=""></script><script src="/dashboard/_next/static/chunks/6130-2be46d70a38f1e82.js" defer=""></script><script src="/dashboard/_next/static/chunks/5739-d67458fcb1386c92.js" defer=""></script><script src="/dashboard/_next/static/chunks/7411-b15471acd2cba716.js" defer=""></script><script src="/dashboard/_next/static/chunks/6989-01359c57e018caa4.js" defer=""></script><script src="/dashboard/_next/static/chunks/3850-ff4a9a69d978632b.js" defer=""></script><script src="/dashboard/_next/static/chunks/6135-4b4d5e824b7f9d3c.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/clusters/%5Bcluster%5D/%5Bjob%5D-602eeead010ec1d6.js" defer=""></script><script src="/dashboard/_next/static/CJlKj9Z9fXGlQCmH4EpLX/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/CJlKj9Z9fXGlQCmH4EpLX/_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":"CJlKj9Z9fXGlQCmH4EpLX","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
@@ -1 +1 @@
1
- <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-66f23594d38c7f16.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/616-3d59f75e2ccf9321.js" defer=""></script><script src="/dashboard/_next/static/chunks/6130-2be46d70a38f1e82.js" defer=""></script><script src="/dashboard/_next/static/chunks/5739-d67458fcb1386c92.js" defer=""></script><script src="/dashboard/_next/static/chunks/7411-b15471acd2cba716.js" defer=""></script><script src="/dashboard/_next/static/chunks/1272-1ef0bf0237faccdb.js" defer=""></script><script src="/dashboard/_next/static/chunks/7359-c8d04e06886000b3.js" defer=""></script><script src="/dashboard/_next/static/chunks/6212-7bd06f60ba693125.js" defer=""></script><script src="/dashboard/_next/static/chunks/6989-01359c57e018caa4.js" defer=""></script><script src="/dashboard/_next/static/chunks/3850-ff4a9a69d978632b.js" defer=""></script><script src="/dashboard/_next/static/chunks/8969-66237729cdf9749e.js" defer=""></script><script src="/dashboard/_next/static/chunks/6990-f6818c84ed8f1c86.js" defer=""></script><script src="/dashboard/_next/static/chunks/6135-4b4d5e824b7f9d3c.js" defer=""></script><script src="/dashboard/_next/static/chunks/1121-d0782b9251f0fcd3.js" defer=""></script><script src="/dashboard/_next/static/chunks/6601-06114c982db410b6.js" defer=""></script><script src="/dashboard/_next/static/chunks/3015-7e0e8f06bb2f881c.js" defer=""></script><script src="/dashboard/_next/static/chunks/6856-5fdc9b851a18acdb.js" defer=""></script><script src="/dashboard/_next/static/chunks/1871-49141c317f3a9020.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/clusters/%5Bcluster%5D-477555ab7c0b13d8.js" defer=""></script><script src="/dashboard/_next/static/jDc1PlRsl9Cc5FQUMLBu8/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/jDc1PlRsl9Cc5FQUMLBu8/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/clusters/[cluster]","query":{},"buildId":"jDc1PlRsl9Cc5FQUMLBu8","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
1
+ <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-434b7577d72c879b.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/616-3d59f75e2ccf9321.js" defer=""></script><script src="/dashboard/_next/static/chunks/6130-2be46d70a38f1e82.js" defer=""></script><script src="/dashboard/_next/static/chunks/5739-d67458fcb1386c92.js" defer=""></script><script src="/dashboard/_next/static/chunks/7411-b15471acd2cba716.js" defer=""></script><script src="/dashboard/_next/static/chunks/1272-1ef0bf0237faccdb.js" defer=""></script><script src="/dashboard/_next/static/chunks/7359-c8d04e06886000b3.js" defer=""></script><script src="/dashboard/_next/static/chunks/6212-7bd06f60ba693125.js" defer=""></script><script src="/dashboard/_next/static/chunks/6989-01359c57e018caa4.js" defer=""></script><script src="/dashboard/_next/static/chunks/3850-ff4a9a69d978632b.js" defer=""></script><script src="/dashboard/_next/static/chunks/8969-0389e2cb52412db3.js" defer=""></script><script src="/dashboard/_next/static/chunks/6990-f6818c84ed8f1c86.js" defer=""></script><script src="/dashboard/_next/static/chunks/6135-4b4d5e824b7f9d3c.js" defer=""></script><script src="/dashboard/_next/static/chunks/4282-d2f3ef2fbf78e347.js" defer=""></script><script src="/dashboard/_next/static/chunks/6601-06114c982db410b6.js" defer=""></script><script src="/dashboard/_next/static/chunks/3015-2dcace420c8939f4.js" defer=""></script><script src="/dashboard/_next/static/chunks/6856-5c94d394259cdb6e.js" defer=""></script><script src="/dashboard/_next/static/chunks/1871-165dc0e1553d9822.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/clusters/%5Bcluster%5D-18b334dedbd9f6f2.js" defer=""></script><script src="/dashboard/_next/static/CJlKj9Z9fXGlQCmH4EpLX/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/CJlKj9Z9fXGlQCmH4EpLX/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/clusters/[cluster]","query":{},"buildId":"CJlKj9Z9fXGlQCmH4EpLX","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
@@ -1 +1 @@
1
- <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-66f23594d38c7f16.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/clusters-2f61f65487f6d8ff.js" defer=""></script><script src="/dashboard/_next/static/jDc1PlRsl9Cc5FQUMLBu8/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/jDc1PlRsl9Cc5FQUMLBu8/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/clusters","query":{},"buildId":"jDc1PlRsl9Cc5FQUMLBu8","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
1
+ <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-434b7577d72c879b.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/clusters-57221ec2e4e01076.js" defer=""></script><script src="/dashboard/_next/static/CJlKj9Z9fXGlQCmH4EpLX/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/CJlKj9Z9fXGlQCmH4EpLX/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/clusters","query":{},"buildId":"CJlKj9Z9fXGlQCmH4EpLX","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
@@ -1 +1 @@
1
- <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-66f23594d38c7f16.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/config-dfb9bf07b13045f4.js" defer=""></script><script src="/dashboard/_next/static/jDc1PlRsl9Cc5FQUMLBu8/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/jDc1PlRsl9Cc5FQUMLBu8/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/config","query":{},"buildId":"jDc1PlRsl9Cc5FQUMLBu8","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
1
+ <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-434b7577d72c879b.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/config-dfb9bf07b13045f4.js" defer=""></script><script src="/dashboard/_next/static/CJlKj9Z9fXGlQCmH4EpLX/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/CJlKj9Z9fXGlQCmH4EpLX/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/config","query":{},"buildId":"CJlKj9Z9fXGlQCmH4EpLX","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
@@ -1 +1 @@
1
- <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-66f23594d38c7f16.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/index-444f1804401f04ea.js" defer=""></script><script src="/dashboard/_next/static/jDc1PlRsl9Cc5FQUMLBu8/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/jDc1PlRsl9Cc5FQUMLBu8/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/","query":{},"buildId":"jDc1PlRsl9Cc5FQUMLBu8","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
1
+ <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-434b7577d72c879b.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/index-444f1804401f04ea.js" defer=""></script><script src="/dashboard/_next/static/CJlKj9Z9fXGlQCmH4EpLX/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/CJlKj9Z9fXGlQCmH4EpLX/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/","query":{},"buildId":"CJlKj9Z9fXGlQCmH4EpLX","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
@@ -1 +1 @@
1
- <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-66f23594d38c7f16.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/infra/%5Bcontext%5D-553b8b5cb65e100b.js" defer=""></script><script src="/dashboard/_next/static/jDc1PlRsl9Cc5FQUMLBu8/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/jDc1PlRsl9Cc5FQUMLBu8/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/infra/[context]","query":{},"buildId":"jDc1PlRsl9Cc5FQUMLBu8","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
1
+ <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-434b7577d72c879b.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/infra/%5Bcontext%5D-44ce535a0a0ad4ec.js" defer=""></script><script src="/dashboard/_next/static/CJlKj9Z9fXGlQCmH4EpLX/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/CJlKj9Z9fXGlQCmH4EpLX/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/infra/[context]","query":{},"buildId":"CJlKj9Z9fXGlQCmH4EpLX","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
@@ -1 +1 @@
1
- <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-66f23594d38c7f16.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/infra-910a22500c50596f.js" defer=""></script><script src="/dashboard/_next/static/jDc1PlRsl9Cc5FQUMLBu8/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/jDc1PlRsl9Cc5FQUMLBu8/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/infra","query":{},"buildId":"jDc1PlRsl9Cc5FQUMLBu8","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
1
+ <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-434b7577d72c879b.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/infra-872e6a00165534f4.js" defer=""></script><script src="/dashboard/_next/static/CJlKj9Z9fXGlQCmH4EpLX/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/CJlKj9Z9fXGlQCmH4EpLX/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/infra","query":{},"buildId":"CJlKj9Z9fXGlQCmH4EpLX","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
@@ -1 +1 @@
1
- <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-66f23594d38c7f16.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/616-3d59f75e2ccf9321.js" defer=""></script><script src="/dashboard/_next/static/chunks/6130-2be46d70a38f1e82.js" defer=""></script><script src="/dashboard/_next/static/chunks/5739-d67458fcb1386c92.js" defer=""></script><script src="/dashboard/_next/static/chunks/7411-b15471acd2cba716.js" defer=""></script><script src="/dashboard/_next/static/chunks/1272-1ef0bf0237faccdb.js" defer=""></script><script src="/dashboard/_next/static/chunks/6212-7bd06f60ba693125.js" defer=""></script><script src="/dashboard/_next/static/chunks/6989-01359c57e018caa4.js" defer=""></script><script src="/dashboard/_next/static/chunks/3850-ff4a9a69d978632b.js" defer=""></script><script src="/dashboard/_next/static/chunks/8969-66237729cdf9749e.js" defer=""></script><script src="/dashboard/_next/static/chunks/6135-4b4d5e824b7f9d3c.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/jobs/%5Bjob%5D-e5c9ce6a24fc0de4.js" defer=""></script><script src="/dashboard/_next/static/jDc1PlRsl9Cc5FQUMLBu8/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/jDc1PlRsl9Cc5FQUMLBu8/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/jobs/[job]","query":{},"buildId":"jDc1PlRsl9Cc5FQUMLBu8","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
1
+ <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-434b7577d72c879b.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/616-3d59f75e2ccf9321.js" defer=""></script><script src="/dashboard/_next/static/chunks/6130-2be46d70a38f1e82.js" defer=""></script><script src="/dashboard/_next/static/chunks/5739-d67458fcb1386c92.js" defer=""></script><script src="/dashboard/_next/static/chunks/7411-b15471acd2cba716.js" defer=""></script><script src="/dashboard/_next/static/chunks/1272-1ef0bf0237faccdb.js" defer=""></script><script src="/dashboard/_next/static/chunks/6212-7bd06f60ba693125.js" defer=""></script><script src="/dashboard/_next/static/chunks/6989-01359c57e018caa4.js" defer=""></script><script src="/dashboard/_next/static/chunks/3850-ff4a9a69d978632b.js" defer=""></script><script src="/dashboard/_next/static/chunks/8969-0389e2cb52412db3.js" defer=""></script><script src="/dashboard/_next/static/chunks/6135-4b4d5e824b7f9d3c.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/jobs/%5Bjob%5D-8677af16befde039.js" defer=""></script><script src="/dashboard/_next/static/CJlKj9Z9fXGlQCmH4EpLX/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/CJlKj9Z9fXGlQCmH4EpLX/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/jobs/[job]","query":{},"buildId":"CJlKj9Z9fXGlQCmH4EpLX","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
@@ -1 +1 @@
1
- <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-66f23594d38c7f16.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/616-3d59f75e2ccf9321.js" defer=""></script><script src="/dashboard/_next/static/chunks/6130-2be46d70a38f1e82.js" defer=""></script><script src="/dashboard/_next/static/chunks/5739-d67458fcb1386c92.js" defer=""></script><script src="/dashboard/_next/static/chunks/1272-1ef0bf0237faccdb.js" defer=""></script><script src="/dashboard/_next/static/chunks/6212-7bd06f60ba693125.js" defer=""></script><script src="/dashboard/_next/static/chunks/6989-01359c57e018caa4.js" defer=""></script><script src="/dashboard/_next/static/chunks/3850-ff4a9a69d978632b.js" defer=""></script><script src="/dashboard/_next/static/chunks/8969-66237729cdf9749e.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/jobs/pools/%5Bpool%5D-bc979970c247d8f3.js" defer=""></script><script src="/dashboard/_next/static/jDc1PlRsl9Cc5FQUMLBu8/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/jDc1PlRsl9Cc5FQUMLBu8/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/jobs/pools/[pool]","query":{},"buildId":"jDc1PlRsl9Cc5FQUMLBu8","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
1
+ <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-434b7577d72c879b.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/616-3d59f75e2ccf9321.js" defer=""></script><script src="/dashboard/_next/static/chunks/6130-2be46d70a38f1e82.js" defer=""></script><script src="/dashboard/_next/static/chunks/5739-d67458fcb1386c92.js" defer=""></script><script src="/dashboard/_next/static/chunks/1272-1ef0bf0237faccdb.js" defer=""></script><script src="/dashboard/_next/static/chunks/6212-7bd06f60ba693125.js" defer=""></script><script src="/dashboard/_next/static/chunks/6989-01359c57e018caa4.js" defer=""></script><script src="/dashboard/_next/static/chunks/3850-ff4a9a69d978632b.js" defer=""></script><script src="/dashboard/_next/static/chunks/8969-0389e2cb52412db3.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/jobs/pools/%5Bpool%5D-e020fd69dbe76cea.js" defer=""></script><script src="/dashboard/_next/static/CJlKj9Z9fXGlQCmH4EpLX/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/CJlKj9Z9fXGlQCmH4EpLX/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/jobs/pools/[pool]","query":{},"buildId":"CJlKj9Z9fXGlQCmH4EpLX","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
@@ -1 +1 @@
1
- <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-66f23594d38c7f16.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/jobs-a35a9dc3c5ccd657.js" defer=""></script><script src="/dashboard/_next/static/jDc1PlRsl9Cc5FQUMLBu8/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/jDc1PlRsl9Cc5FQUMLBu8/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/jobs","query":{},"buildId":"jDc1PlRsl9Cc5FQUMLBu8","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
1
+ <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-434b7577d72c879b.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/jobs-0dc34cf9a8710a9f.js" defer=""></script><script src="/dashboard/_next/static/CJlKj9Z9fXGlQCmH4EpLX/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/CJlKj9Z9fXGlQCmH4EpLX/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/jobs","query":{},"buildId":"CJlKj9Z9fXGlQCmH4EpLX","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
@@ -1 +1 @@
1
- <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-66f23594d38c7f16.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/users-98d2ed979084162a.js" defer=""></script><script src="/dashboard/_next/static/jDc1PlRsl9Cc5FQUMLBu8/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/jDc1PlRsl9Cc5FQUMLBu8/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/users","query":{},"buildId":"jDc1PlRsl9Cc5FQUMLBu8","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
1
+ <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-434b7577d72c879b.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/users-3a543725492fb896.js" defer=""></script><script src="/dashboard/_next/static/CJlKj9Z9fXGlQCmH4EpLX/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/CJlKj9Z9fXGlQCmH4EpLX/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/users","query":{},"buildId":"CJlKj9Z9fXGlQCmH4EpLX","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
@@ -1 +1 @@
1
- <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-66f23594d38c7f16.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/volumes-835d14ba94808f79.js" defer=""></script><script src="/dashboard/_next/static/jDc1PlRsl9Cc5FQUMLBu8/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/jDc1PlRsl9Cc5FQUMLBu8/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/volumes","query":{},"buildId":"jDc1PlRsl9Cc5FQUMLBu8","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
1
+ <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-434b7577d72c879b.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/volumes-d2af9d22e87cc4ba.js" defer=""></script><script src="/dashboard/_next/static/CJlKj9Z9fXGlQCmH4EpLX/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/CJlKj9Z9fXGlQCmH4EpLX/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/volumes","query":{},"buildId":"CJlKj9Z9fXGlQCmH4EpLX","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
@@ -1 +1 @@
1
- <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-66f23594d38c7f16.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/workspace/new-3f88a1c7e86a3f86.js" defer=""></script><script src="/dashboard/_next/static/jDc1PlRsl9Cc5FQUMLBu8/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/jDc1PlRsl9Cc5FQUMLBu8/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/workspace/new","query":{},"buildId":"jDc1PlRsl9Cc5FQUMLBu8","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
1
+ <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-434b7577d72c879b.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/workspace/new-3f88a1c7e86a3f86.js" defer=""></script><script src="/dashboard/_next/static/CJlKj9Z9fXGlQCmH4EpLX/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/CJlKj9Z9fXGlQCmH4EpLX/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/workspace/new","query":{},"buildId":"CJlKj9Z9fXGlQCmH4EpLX","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
@@ -1 +1 @@
1
- <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-66f23594d38c7f16.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/616-3d59f75e2ccf9321.js" defer=""></script><script src="/dashboard/_next/static/chunks/6130-2be46d70a38f1e82.js" defer=""></script><script src="/dashboard/_next/static/chunks/5739-d67458fcb1386c92.js" defer=""></script><script src="/dashboard/_next/static/chunks/7411-b15471acd2cba716.js" defer=""></script><script src="/dashboard/_next/static/chunks/1272-1ef0bf0237faccdb.js" defer=""></script><script src="/dashboard/_next/static/chunks/7359-c8d04e06886000b3.js" defer=""></script><script src="/dashboard/_next/static/chunks/6989-01359c57e018caa4.js" defer=""></script><script src="/dashboard/_next/static/chunks/3850-ff4a9a69d978632b.js" defer=""></script><script src="/dashboard/_next/static/chunks/8969-66237729cdf9749e.js" defer=""></script><script src="/dashboard/_next/static/chunks/6990-f6818c84ed8f1c86.js" defer=""></script><script src="/dashboard/_next/static/chunks/6135-4b4d5e824b7f9d3c.js" defer=""></script><script src="/dashboard/_next/static/chunks/1121-d0782b9251f0fcd3.js" defer=""></script><script src="/dashboard/_next/static/chunks/6601-06114c982db410b6.js" defer=""></script><script src="/dashboard/_next/static/chunks/3015-7e0e8f06bb2f881c.js" defer=""></script><script src="/dashboard/_next/static/chunks/1141-3b40c39626f99c89.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/workspaces/%5Bname%5D-e8688c35c06f0ac5.js" defer=""></script><script src="/dashboard/_next/static/jDc1PlRsl9Cc5FQUMLBu8/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/jDc1PlRsl9Cc5FQUMLBu8/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/workspaces/[name]","query":{},"buildId":"jDc1PlRsl9Cc5FQUMLBu8","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
1
+ <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-434b7577d72c879b.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/616-3d59f75e2ccf9321.js" defer=""></script><script src="/dashboard/_next/static/chunks/6130-2be46d70a38f1e82.js" defer=""></script><script src="/dashboard/_next/static/chunks/5739-d67458fcb1386c92.js" defer=""></script><script src="/dashboard/_next/static/chunks/7411-b15471acd2cba716.js" defer=""></script><script src="/dashboard/_next/static/chunks/1272-1ef0bf0237faccdb.js" defer=""></script><script src="/dashboard/_next/static/chunks/7359-c8d04e06886000b3.js" defer=""></script><script src="/dashboard/_next/static/chunks/6989-01359c57e018caa4.js" defer=""></script><script src="/dashboard/_next/static/chunks/3850-ff4a9a69d978632b.js" defer=""></script><script src="/dashboard/_next/static/chunks/8969-0389e2cb52412db3.js" defer=""></script><script src="/dashboard/_next/static/chunks/6990-f6818c84ed8f1c86.js" defer=""></script><script src="/dashboard/_next/static/chunks/6135-4b4d5e824b7f9d3c.js" defer=""></script><script src="/dashboard/_next/static/chunks/4282-d2f3ef2fbf78e347.js" defer=""></script><script src="/dashboard/_next/static/chunks/6601-06114c982db410b6.js" defer=""></script><script src="/dashboard/_next/static/chunks/3015-2dcace420c8939f4.js" defer=""></script><script src="/dashboard/_next/static/chunks/1141-ec6f902ffb865853.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/workspaces/%5Bname%5D-9ad108cd67d16d96.js" defer=""></script><script src="/dashboard/_next/static/CJlKj9Z9fXGlQCmH4EpLX/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/CJlKj9Z9fXGlQCmH4EpLX/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/workspaces/[name]","query":{},"buildId":"CJlKj9Z9fXGlQCmH4EpLX","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
@@ -1 +1 @@
1
- <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-66f23594d38c7f16.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/workspaces-69c80d677d3c2949.js" defer=""></script><script src="/dashboard/_next/static/jDc1PlRsl9Cc5FQUMLBu8/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/jDc1PlRsl9Cc5FQUMLBu8/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/workspaces","query":{},"buildId":"jDc1PlRsl9Cc5FQUMLBu8","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
1
+ <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-434b7577d72c879b.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/workspaces-6fc994fa1ee6c6bf.js" defer=""></script><script src="/dashboard/_next/static/CJlKj9Z9fXGlQCmH4EpLX/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/CJlKj9Z9fXGlQCmH4EpLX/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/workspaces","query":{},"buildId":"CJlKj9Z9fXGlQCmH4EpLX","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
sky/global_user_state.py CHANGED
@@ -32,6 +32,7 @@ from sky import sky_logging
32
32
  from sky import skypilot_config
33
33
  from sky.metrics import utils as metrics_lib
34
34
  from sky.skylet import constants
35
+ from sky.utils import annotations
35
36
  from sky.utils import common_utils
36
37
  from sky.utils import context_utils
37
38
  from sky.utils import registry
@@ -342,6 +343,10 @@ def initialize_and_get_db() -> sqlalchemy.engine.Engine:
342
343
 
343
344
  # return engine
344
345
  _SQLALCHEMY_ENGINE = engine
346
+ # Cache the result of _sqlite_supports_returning()
347
+ # ahead of time, as it won't change throughout
348
+ # the lifetime of the engine.
349
+ _sqlite_supports_returning()
345
350
  return _SQLALCHEMY_ENGINE
346
351
 
347
352
 
@@ -372,19 +377,51 @@ def _init_db(func):
372
377
  return wrapper
373
378
 
374
379
 
380
+ @annotations.lru_cache(scope='global', maxsize=1)
381
+ def _sqlite_supports_returning() -> bool:
382
+ """Check if SQLite (3.35.0+) and SQLAlchemy (2.0+) support RETURNING.
383
+
384
+ See https://sqlite.org/lang_returning.html and
385
+ https://docs.sqlalchemy.org/en/20/dialects/sqlite.html#insert-update-delete-returning # pylint: disable=line-too-long
386
+ """
387
+ sqlalchemy_version_parts = sqlalchemy.__version__.split('.')
388
+ assert len(sqlalchemy_version_parts) >= 1, \
389
+ f'Invalid SQLAlchemy version: {sqlalchemy.__version__}'
390
+ sqlalchemy_major = int(sqlalchemy_version_parts[0])
391
+ if sqlalchemy_major < 2:
392
+ return False
393
+
394
+ assert _SQLALCHEMY_ENGINE is not None
395
+ if (_SQLALCHEMY_ENGINE.dialect.name !=
396
+ db_utils.SQLAlchemyDialect.SQLITE.value):
397
+ return False
398
+ with orm.Session(_SQLALCHEMY_ENGINE) as session:
399
+ result = session.execute(sqlalchemy.text('SELECT sqlite_version()'))
400
+ version_str = result.scalar()
401
+ version_parts = version_str.split('.')
402
+ assert len(version_parts) >= 2, \
403
+ f'Invalid version string: {version_str}'
404
+ major, minor = int(version_parts[0]), int(version_parts[1])
405
+ return (major > 3) or (major == 3 and minor >= 35)
406
+
407
+
375
408
  @_init_db
376
409
  @metrics_lib.time_me
377
- def add_or_update_user(user: models.User,
378
- allow_duplicate_name: bool = True) -> bool:
410
+ def add_or_update_user(
411
+ user: models.User,
412
+ allow_duplicate_name: bool = True,
413
+ return_user: bool = False
414
+ ) -> typing.Union[bool, typing.Tuple[bool, models.User]]:
379
415
  """Store the mapping from user hash to user name for display purposes.
380
416
 
381
417
  Returns:
382
- Boolean: whether the user is newly added
418
+ If return_user=False: bool (whether the user is newly added)
419
+ If return_user=True: Tuple[bool, models.User]
383
420
  """
384
421
  assert _SQLALCHEMY_ENGINE is not None
385
422
 
386
423
  if user.name is None:
387
- return False
424
+ return (False, user) if return_user else False
388
425
 
389
426
  # Set created_at if not already set
390
427
  created_at = user.created_at
@@ -396,7 +433,7 @@ def add_or_update_user(user: models.User,
396
433
  existing_user = session.query(user_table).filter(
397
434
  user_table.c.name == user.name).first()
398
435
  if existing_user is not None:
399
- return False
436
+ return (False, user) if return_user else False
400
437
 
401
438
  if (_SQLALCHEMY_ENGINE.dialect.name ==
402
439
  db_utils.SQLAlchemyDialect.SQLITE.value):
@@ -410,24 +447,57 @@ def add_or_update_user(user: models.User,
410
447
  name=user.name,
411
448
  password=user.password,
412
449
  created_at=created_at)
450
+ use_returning = return_user and _sqlite_supports_returning()
451
+ if use_returning:
452
+ insert_stmnt = insert_stmnt.returning(
453
+ user_table.c.id,
454
+ user_table.c.name,
455
+ user_table.c.password,
456
+ user_table.c.created_at,
457
+ )
413
458
  result = session.execute(insert_stmnt)
414
459
 
415
- # Check if the INSERT actually inserted a row
416
- was_inserted = result.rowcount > 0
460
+ row = None
461
+ if use_returning:
462
+ # With RETURNING, check if we got a row back.
463
+ row = result.fetchone()
464
+ was_inserted = row is not None
465
+ else:
466
+ # Without RETURNING, use rowcount.
467
+ was_inserted = result.rowcount > 0
417
468
 
418
469
  if not was_inserted:
419
470
  # User existed, so update it (but don't update created_at)
471
+ update_values = {user_table.c.name: user.name}
420
472
  if user.password:
421
- session.query(user_table).filter_by(id=user.id).update({
422
- user_table.c.name: user.name,
423
- user_table.c.password: user.password
424
- })
425
- else:
426
- session.query(user_table).filter_by(id=user.id).update(
427
- {user_table.c.name: user.name})
473
+ update_values[user_table.c.password] = user.password
474
+
475
+ update_stmnt = sqlalchemy.update(user_table).where(
476
+ user_table.c.id == user.id).values(update_values)
477
+ if use_returning:
478
+ update_stmnt = update_stmnt.returning(
479
+ user_table.c.id, user_table.c.name,
480
+ user_table.c.password, user_table.c.created_at)
481
+
482
+ result = session.execute(update_stmnt)
483
+ if use_returning:
484
+ row = result.fetchone()
428
485
 
429
486
  session.commit()
430
- return was_inserted
487
+
488
+ if return_user:
489
+ if row is None:
490
+ # row=None means the sqlite used has no RETURNING support,
491
+ # so we need to do a separate query
492
+ row = session.query(user_table).filter_by(
493
+ id=user.id).first()
494
+ updated_user = models.User(id=row.id,
495
+ name=row.name,
496
+ password=row.password,
497
+ created_at=row.created_at)
498
+ return was_inserted, updated_user
499
+ else:
500
+ return was_inserted
431
501
 
432
502
  elif (_SQLALCHEMY_ENGINE.dialect.name ==
433
503
  db_utils.SQLAlchemyDialect.POSTGRESQL.value):
@@ -452,6 +522,9 @@ def add_or_update_user(user: models.User,
452
522
  upsert_stmnt = insert_stmnt.on_conflict_do_update(
453
523
  index_elements=[user_table.c.id], set_=set_).returning(
454
524
  user_table.c.id,
525
+ user_table.c.name,
526
+ user_table.c.password,
527
+ user_table.c.created_at,
455
528
  # This will be True for INSERT, False for UPDATE
456
529
  sqlalchemy.literal_column('(xmax = 0)').label('was_inserted'
457
530
  ))
@@ -459,10 +532,17 @@ def add_or_update_user(user: models.User,
459
532
  result = session.execute(upsert_stmnt)
460
533
  row = result.fetchone()
461
534
 
462
- ret = bool(row.was_inserted) if row else False
535
+ was_inserted = bool(row.was_inserted) if row else False
463
536
  session.commit()
464
537
 
465
- return ret
538
+ if return_user:
539
+ updated_user = models.User(id=row.id,
540
+ name=row.name,
541
+ password=row.password,
542
+ created_at=row.created_at)
543
+ return was_inserted, updated_user
544
+ else:
545
+ return was_inserted
466
546
  else:
467
547
  raise ValueError('Unsupported database dialect')
468
548
 
@@ -1081,6 +1161,26 @@ def get_handles_from_cluster_names(
1081
1161
  }
1082
1162
 
1083
1163
 
1164
+ @_init_db
1165
+ @metrics_lib.time_me
1166
+ def get_cluster_name_to_handle_map(
1167
+ is_managed: Optional[bool] = None,
1168
+ ) -> Dict[str, Optional['backends.ResourceHandle']]:
1169
+ assert _SQLALCHEMY_ENGINE is not None
1170
+ with orm.Session(_SQLALCHEMY_ENGINE) as session:
1171
+ query = session.query(cluster_table.c.name, cluster_table.c.handle)
1172
+ if is_managed is not None:
1173
+ query = query.filter(cluster_table.c.is_managed == int(is_managed))
1174
+ rows = query.all()
1175
+ name_to_handle = {}
1176
+ for row in rows:
1177
+ if row.handle and len(row.handle) > 0:
1178
+ name_to_handle[row.name] = pickle.loads(row.handle)
1179
+ else:
1180
+ name_to_handle[row.name] = None
1181
+ return name_to_handle
1182
+
1183
+
1084
1184
  @_init_db_async
1085
1185
  @metrics_lib.time_me
1086
1186
  async def get_status_from_cluster_name_async(
sky/jobs/client/sdk.py CHANGED
@@ -130,8 +130,11 @@ def queue(
130
130
  refresh: bool,
131
131
  skip_finished: bool = False,
132
132
  all_users: bool = False,
133
- job_ids: Optional[List[int]] = None
134
- ) -> server_common.RequestId[List[responses.ManagedJobRecord]]:
133
+ job_ids: Optional[List[int]] = None,
134
+ limit: Optional[int] = None,
135
+ fields: Optional[List[str]] = None,
136
+ ) -> server_common.RequestId[Union[List[responses.ManagedJobRecord], Tuple[
137
+ List[responses.ManagedJobRecord], int, Dict[str, int], int]]]:
135
138
  """Gets statuses of managed jobs.
136
139
 
137
140
  Please refer to sky.cli.job_queue for documentation.
@@ -141,6 +144,8 @@ def queue(
141
144
  skip_finished: Whether to skip finished jobs.
142
145
  all_users: Whether to show all users' jobs.
143
146
  job_ids: IDs of the managed jobs to show.
147
+ limit: Number of jobs to show.
148
+ fields: Fields to get for the managed jobs.
144
149
 
145
150
  Returns:
146
151
  The request ID of the queue request.
@@ -173,15 +178,29 @@ def queue(
173
178
  does not exist.
174
179
  RuntimeError: if failed to get the managed jobs with ssh.
175
180
  """
176
- body = payloads.JobsQueueBody(
177
- refresh=refresh,
178
- skip_finished=skip_finished,
179
- all_users=all_users,
180
- job_ids=job_ids,
181
- )
181
+ remote_api_version = versions.get_remote_api_version()
182
+ if remote_api_version and remote_api_version >= 18:
183
+ body = payloads.JobsQueueV2Body(
184
+ refresh=refresh,
185
+ skip_finished=skip_finished,
186
+ all_users=all_users,
187
+ job_ids=job_ids,
188
+ limit=limit,
189
+ fields=fields,
190
+ )
191
+ path = '/jobs/queue/v2'
192
+ else:
193
+ body = payloads.JobsQueueBody(
194
+ refresh=refresh,
195
+ skip_finished=skip_finished,
196
+ all_users=all_users,
197
+ job_ids=job_ids,
198
+ )
199
+ path = '/jobs/queue'
200
+
182
201
  response = server_common.make_authenticated_request(
183
202
  'POST',
184
- '/jobs/queue',
203
+ path,
185
204
  json=json.loads(body.model_dump_json()),
186
205
  timeout=(5, None))
187
206
  return server_common.get_request_id(response=response)