skypilot-nightly 1.0.0.dev20250720__tar.gz → 1.0.0.dev20250723__tar.gz
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.
- {skypilot_nightly-1.0.0.dev20250720/sky/setup_files → skypilot_nightly-1.0.0.dev20250723}/MANIFEST.in +1 -1
- {skypilot_nightly-1.0.0.dev20250720/skypilot_nightly.egg-info → skypilot_nightly-1.0.0.dev20250723}/PKG-INFO +1 -1
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/__init__.py +2 -2
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/admin_policy.py +11 -4
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/backends/backend_utils.py +27 -11
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/backends/cloud_vm_ray_backend.py +22 -27
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/client/cli/command.py +38 -23
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/client/sdk.py +52 -7
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/clouds/nebius.py +2 -5
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/clouds/vast.py +2 -1
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/dashboard/out/404.html +1 -1
- skypilot_nightly-1.0.0.dev20250720/sky/dashboard/out/_next/static/chunks/1141-d8c6404a7c6fffe6.js → skypilot_nightly-1.0.0.dev20250723/sky/dashboard/out/_next/static/chunks/1141-e49a159c30a6c4a7.js +1 -1
- skypilot_nightly-1.0.0.dev20250723/sky/dashboard/out/_next/static/chunks/1559-18717d96ef2fcbe9.js +30 -0
- skypilot_nightly-1.0.0.dev20250720/sky/dashboard/out/_next/static/chunks/1871-a821dcaaae2a3823.js → skypilot_nightly-1.0.0.dev20250723/sky/dashboard/out/_next/static/chunks/1871-ea0e7283886407ca.js +2 -2
- skypilot_nightly-1.0.0.dev20250723/sky/dashboard/out/_next/static/chunks/2003.b82e6db40ec4c463.js +1 -0
- skypilot_nightly-1.0.0.dev20250723/sky/dashboard/out/_next/static/chunks/2350.23778a2b19aabd33.js +1 -0
- skypilot_nightly-1.0.0.dev20250723/sky/dashboard/out/_next/static/chunks/2369.2d6e4757f8dfc2b7.js +15 -0
- skypilot_nightly-1.0.0.dev20250720/sky/dashboard/out/_next/static/chunks/2641.5233e938f14e31a7.js → skypilot_nightly-1.0.0.dev20250723/sky/dashboard/out/_next/static/chunks/2641.74c19c4d45a2c034.js +1 -1
- skypilot_nightly-1.0.0.dev20250723/sky/dashboard/out/_next/static/chunks/3785.59705416215ff08b.js +1 -0
- skypilot_nightly-1.0.0.dev20250723/sky/dashboard/out/_next/static/chunks/4869.da729a7db3a31f43.js +16 -0
- skypilot_nightly-1.0.0.dev20250723/sky/dashboard/out/_next/static/chunks/4937.d75809403fc264ac.js +15 -0
- skypilot_nightly-1.0.0.dev20250723/sky/dashboard/out/_next/static/chunks/6135-2abbd0352f8ee061.js +1 -0
- skypilot_nightly-1.0.0.dev20250723/sky/dashboard/out/_next/static/chunks/691.488b4aef97c28727.js +55 -0
- skypilot_nightly-1.0.0.dev20250723/sky/dashboard/out/_next/static/chunks/6990-f64e03df359e04f7.js +1 -0
- skypilot_nightly-1.0.0.dev20250723/sky/dashboard/out/_next/static/chunks/7411-2cc31dc0fdf2a9ad.js +41 -0
- skypilot_nightly-1.0.0.dev20250723/sky/dashboard/out/_next/static/chunks/9025.4a9099bdf3ed4875.js +6 -0
- skypilot_nightly-1.0.0.dev20250720/sky/dashboard/out/_next/static/chunks/938-63fc419cb82ad9b3.js → skypilot_nightly-1.0.0.dev20250723/sky/dashboard/out/_next/static/chunks/938-7ee806653aef0609.js +1 -1
- skypilot_nightly-1.0.0.dev20250723/sky/dashboard/out/_next/static/chunks/9847.387abf8a14d722db.js +30 -0
- skypilot_nightly-1.0.0.dev20250720/sky/dashboard/out/_next/static/chunks/9984.2b5e3fa69171bff9.js → skypilot_nightly-1.0.0.dev20250723/sky/dashboard/out/_next/static/chunks/9984.0460de9d3adf5582.js +1 -1
- skypilot_nightly-1.0.0.dev20250723/sky/dashboard/out/_next/static/chunks/pages/_app-da491665d4289aae.js +34 -0
- skypilot_nightly-1.0.0.dev20250720/sky/dashboard/out/_next/static/chunks/pages/clusters/[cluster]/[job]-fa406155b4223d0d.js → skypilot_nightly-1.0.0.dev20250723/sky/dashboard/out/_next/static/chunks/pages/clusters/[cluster]/[job]-2186770cc2de1623.js +2 -2
- skypilot_nightly-1.0.0.dev20250720/sky/dashboard/out/_next/static/chunks/pages/clusters/[cluster]-0c37ee1ac5f3474d.js → skypilot_nightly-1.0.0.dev20250723/sky/dashboard/out/_next/static/chunks/pages/clusters/[cluster]-95afb019ab85801c.js +1 -1
- skypilot_nightly-1.0.0.dev20250723/sky/dashboard/out/_next/static/chunks/pages/clusters-3d4be4961e1c94eb.js +1 -0
- skypilot_nightly-1.0.0.dev20250723/sky/dashboard/out/_next/static/chunks/pages/index-89e7daf7b7df02e0.js +1 -0
- skypilot_nightly-1.0.0.dev20250723/sky/dashboard/out/_next/static/chunks/pages/infra/[context]-a90b4fe4616dc501.js +1 -0
- skypilot_nightly-1.0.0.dev20250723/sky/dashboard/out/_next/static/chunks/pages/infra-0d3d1f890c5d188a.js +1 -0
- skypilot_nightly-1.0.0.dev20250720/sky/dashboard/out/_next/static/chunks/pages/jobs/[job]-c5b357bfd9502fbe.js → skypilot_nightly-1.0.0.dev20250723/sky/dashboard/out/_next/static/chunks/pages/jobs/[job]-dc0299ffefebcdbe.js +2 -2
- skypilot_nightly-1.0.0.dev20250723/sky/dashboard/out/_next/static/chunks/pages/jobs-49f790d12a85027c.js +1 -0
- skypilot_nightly-1.0.0.dev20250720/sky/dashboard/out/_next/static/chunks/pages/users-19e98664bdd61643.js → skypilot_nightly-1.0.0.dev20250723/sky/dashboard/out/_next/static/chunks/pages/users-6790fcefd5487b13.js +1 -1
- skypilot_nightly-1.0.0.dev20250723/sky/dashboard/out/_next/static/chunks/pages/workspaces/[name]-6bcd4b20914d76c9.js +1 -0
- skypilot_nightly-1.0.0.dev20250723/sky/dashboard/out/_next/static/chunks/pages/workspaces-5f7fe4b7d55b8612.js +1 -0
- skypilot_nightly-1.0.0.dev20250723/sky/dashboard/out/_next/static/chunks/webpack-a305898dc479711e.js +1 -0
- skypilot_nightly-1.0.0.dev20250723/sky/dashboard/out/_next/static/css/b3227360726f12eb.css +3 -0
- skypilot_nightly-1.0.0.dev20250723/sky/dashboard/out/_next/static/mym3Ciwp-zqU7ZpOLGnrW/_buildManifest.js +1 -0
- skypilot_nightly-1.0.0.dev20250723/sky/dashboard/out/clusters/[cluster]/[job].html +1 -0
- skypilot_nightly-1.0.0.dev20250723/sky/dashboard/out/clusters/[cluster].html +1 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/dashboard/out/clusters.html +1 -1
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/dashboard/out/config.html +1 -1
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/dashboard/out/index.html +1 -1
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/dashboard/out/infra/[context].html +1 -1
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/dashboard/out/infra.html +1 -1
- skypilot_nightly-1.0.0.dev20250723/sky/dashboard/out/jobs/[job].html +1 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/dashboard/out/jobs.html +1 -1
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/dashboard/out/users.html +1 -1
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/dashboard/out/volumes.html +1 -1
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/dashboard/out/workspace/new.html +1 -1
- skypilot_nightly-1.0.0.dev20250723/sky/dashboard/out/workspaces/[name].html +1 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/dashboard/out/workspaces.html +1 -1
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/data/mounting_utils.py +93 -32
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/global_user_state.py +2 -3
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/jobs/state.py +2 -2
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/provision/nebius/utils.py +3 -6
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/server/common.py +4 -3
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723/sky/setup_files}/MANIFEST.in +1 -1
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/setup_files/alembic.ini +0 -4
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/skylet/constants.py +4 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/skypilot_config.py +5 -31
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/utils/common_utils.py +8 -3
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/utils/config_utils.py +15 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/utils/db/migration_utils.py +44 -4
- skypilot_nightly-1.0.0.dev20250723/sky/utils/locks.py +319 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/utils/schemas.py +38 -34
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/utils/timeline.py +41 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723/skypilot_nightly.egg-info}/PKG-INFO +1 -1
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/skypilot_nightly.egg-info/SOURCES.txt +35 -35
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/tests/test_config.py +153 -0
- skypilot_nightly-1.0.0.dev20250720/sky/dashboard/out/_next/static/chunks/1746.27d40aedc22bd2d6.js +0 -60
- skypilot_nightly-1.0.0.dev20250720/sky/dashboard/out/_next/static/chunks/2544.27f70672535675ed.js +0 -1
- skypilot_nightly-1.0.0.dev20250720/sky/dashboard/out/_next/static/chunks/2875.c24c6d57dc82e436.js +0 -25
- skypilot_nightly-1.0.0.dev20250720/sky/dashboard/out/_next/static/chunks/3785.95b94f18aaec7233.js +0 -1
- skypilot_nightly-1.0.0.dev20250720/sky/dashboard/out/_next/static/chunks/3947-b059261d6fa88a1f.js +0 -35
- skypilot_nightly-1.0.0.dev20250720/sky/dashboard/out/_next/static/chunks/430.ed51037d1a4a438b.js +0 -1
- skypilot_nightly-1.0.0.dev20250720/sky/dashboard/out/_next/static/chunks/4869.c7c055a5c2814f33.js +0 -16
- skypilot_nightly-1.0.0.dev20250720/sky/dashboard/out/_next/static/chunks/5491.918ffed0ba7a5294.js +0 -20
- skypilot_nightly-1.0.0.dev20250720/sky/dashboard/out/_next/static/chunks/6990-dcb411b566e64cde.js +0 -1
- skypilot_nightly-1.0.0.dev20250720/sky/dashboard/out/_next/static/chunks/804-9f5e98ce84d46bdd.js +0 -21
- skypilot_nightly-1.0.0.dev20250720/sky/dashboard/out/_next/static/chunks/9025.133e9ba5c780afeb.js +0 -6
- skypilot_nightly-1.0.0.dev20250720/sky/dashboard/out/_next/static/chunks/9470-8178183f3bae198f.js +0 -1
- skypilot_nightly-1.0.0.dev20250720/sky/dashboard/out/_next/static/chunks/9847.46e613d000c55859.js +0 -30
- skypilot_nightly-1.0.0.dev20250720/sky/dashboard/out/_next/static/chunks/pages/_app-507712f30cd3cec3.js +0 -20
- skypilot_nightly-1.0.0.dev20250720/sky/dashboard/out/_next/static/chunks/pages/clusters-102d169e87913ba1.js +0 -1
- skypilot_nightly-1.0.0.dev20250720/sky/dashboard/out/_next/static/chunks/pages/index-927ddeebe57a8ac3.js +0 -1
- skypilot_nightly-1.0.0.dev20250720/sky/dashboard/out/_next/static/chunks/pages/infra/[context]-8b0809f59034d509.js +0 -1
- skypilot_nightly-1.0.0.dev20250720/sky/dashboard/out/_next/static/chunks/pages/infra-ae9d2f705ce582c9.js +0 -1
- skypilot_nightly-1.0.0.dev20250720/sky/dashboard/out/_next/static/chunks/pages/jobs-5bbdc71878f0a068.js +0 -1
- skypilot_nightly-1.0.0.dev20250720/sky/dashboard/out/_next/static/chunks/pages/workspaces/[name]-7c0187f43757a548.js +0 -1
- skypilot_nightly-1.0.0.dev20250720/sky/dashboard/out/_next/static/chunks/pages/workspaces-a1e43d9ef51a9cea.js +0 -1
- skypilot_nightly-1.0.0.dev20250720/sky/dashboard/out/_next/static/chunks/webpack-26cdc782eed15a7d.js +0 -1
- skypilot_nightly-1.0.0.dev20250720/sky/dashboard/out/_next/static/css/5122cb0a08486fd3.css +0 -3
- skypilot_nightly-1.0.0.dev20250720/sky/dashboard/out/_next/static/pTQKG61ng32Zc7gsAROFJ/_buildManifest.js +0 -1
- skypilot_nightly-1.0.0.dev20250720/sky/dashboard/out/clusters/[cluster]/[job].html +0 -1
- skypilot_nightly-1.0.0.dev20250720/sky/dashboard/out/clusters/[cluster].html +0 -1
- skypilot_nightly-1.0.0.dev20250720/sky/dashboard/out/jobs/[job].html +0 -1
- skypilot_nightly-1.0.0.dev20250720/sky/dashboard/out/workspaces/[name].html +0 -1
- skypilot_nightly-1.0.0.dev20250720/sky/schemas/db/skypilot_config/001_initial_schema.py +0 -30
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/LICENSE +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/README.md +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/pyproject.toml +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/setup.cfg +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/setup.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/adaptors/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/adaptors/aws.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/adaptors/azure.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/adaptors/cloudflare.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/adaptors/common.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/adaptors/cudo.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/adaptors/do.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/adaptors/docker.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/adaptors/gcp.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/adaptors/hyperbolic.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/adaptors/ibm.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/adaptors/kubernetes.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/adaptors/nebius.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/adaptors/oci.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/adaptors/runpod.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/adaptors/vast.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/adaptors/vsphere.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/authentication.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/backends/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/backends/backend.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/backends/docker_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/backends/local_docker_backend.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/backends/monkey_patches/monkey_patch_ray_up.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/backends/wheel_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/catalog/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/catalog/aws_catalog.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/catalog/azure_catalog.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/catalog/common.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/catalog/config.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/catalog/cudo_catalog.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/catalog/data_fetchers/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/catalog/data_fetchers/analyze.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/catalog/data_fetchers/fetch_aws.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/catalog/data_fetchers/fetch_azure.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/catalog/data_fetchers/fetch_cudo.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/catalog/data_fetchers/fetch_fluidstack.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/catalog/data_fetchers/fetch_gcp.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/catalog/data_fetchers/fetch_hyperbolic.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/catalog/data_fetchers/fetch_ibm.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/catalog/data_fetchers/fetch_lambda_cloud.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/catalog/data_fetchers/fetch_nebius.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/catalog/data_fetchers/fetch_vast.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/catalog/data_fetchers/fetch_vsphere.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/catalog/do_catalog.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/catalog/fluidstack_catalog.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/catalog/gcp_catalog.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/catalog/hyperbolic_catalog.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/catalog/ibm_catalog.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/catalog/kubernetes_catalog.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/catalog/lambda_catalog.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/catalog/nebius_catalog.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/catalog/oci_catalog.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/catalog/paperspace_catalog.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/catalog/runpod_catalog.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/catalog/scp_catalog.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/catalog/ssh_catalog.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/catalog/vast_catalog.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/catalog/vsphere_catalog.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/check.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/cli.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/client/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/client/cli/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/client/cli/deprecation_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/client/cli/flags.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/client/cli/git.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/client/common.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/client/oauth.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/client/service_account_auth.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/cloud_stores.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/clouds/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/clouds/aws.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/clouds/azure.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/clouds/cloud.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/clouds/cudo.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/clouds/do.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/clouds/fluidstack.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/clouds/gcp.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/clouds/hyperbolic.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/clouds/ibm.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/clouds/kubernetes.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/clouds/lambda_cloud.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/clouds/oci.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/clouds/paperspace.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/clouds/runpod.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/clouds/scp.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/clouds/ssh.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/clouds/utils/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/clouds/utils/aws_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/clouds/utils/azure_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/clouds/utils/gcp_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/clouds/utils/oci_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/clouds/utils/scp_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/clouds/vsphere.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/core.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/dag.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/dashboard/out/_next/static/chunks/1043-869d9c78bf5dd3df.js +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/dashboard/out/_next/static/chunks/1272-1ef0bf0237faccdb.js +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/dashboard/out/_next/static/chunks/1664-d65361e92b85e786.js +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/dashboard/out/_next/static/chunks/3698-9fa11dafb5cad4a6.js +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/dashboard/out/_next/static/chunks/3937.d7f1c55d1916c7f2.js +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/dashboard/out/_next/static/chunks/4725.66125dcd9832aa5d.js +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/dashboard/out/_next/static/chunks/5230-df791914b54d91d9.js +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/dashboard/out/_next/static/chunks/5739-5ea3ffa10fc884f2.js +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/dashboard/out/_next/static/chunks/616-162f3033ffcd3d31.js +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/dashboard/out/_next/static/chunks/6601-d4a381403a8bae91.js +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/dashboard/out/_next/static/chunks/6989-eab0e9c16b64fd9f.js +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/dashboard/out/_next/static/chunks/8969-8e0b2055bf5dd499.js +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/dashboard/out/_next/static/chunks/fd9d1056-61f2257a9cd8b32b.js +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/dashboard/out/_next/static/chunks/framework-efc06c2733009cd3.js +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/dashboard/out/_next/static/chunks/main-app-68c028b1bc5e1b72.js +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/dashboard/out/_next/static/chunks/main-c0a4f1ea606d48d2.js +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/dashboard/out/_next/static/chunks/pages/_error-c72a1f77a3c0be1b.js +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/dashboard/out/_next/static/chunks/pages/config-a2673b256b6d416f.js +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/dashboard/out/_next/static/chunks/pages/volumes-61ea7ba7e56f8d06.js +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/dashboard/out/_next/static/chunks/pages/workspace/new-5629d4e551dba1ee.js +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/dashboard/out/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js +0 -0
- {skypilot_nightly-1.0.0.dev20250720/sky/dashboard/out/_next/static/pTQKG61ng32Zc7gsAROFJ → skypilot_nightly-1.0.0.dev20250723/sky/dashboard/out/_next/static/mym3Ciwp-zqU7ZpOLGnrW}/_ssgManifest.js +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/dashboard/out/favicon.ico +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/dashboard/out/skypilot.svg +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/dashboard/out/videos/cursor-small.mp4 +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/data/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/data/data_transfer.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/data/data_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/data/storage.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/data/storage_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/exceptions.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/execution.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/jobs/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/jobs/client/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/jobs/client/sdk.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/jobs/constants.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/jobs/controller.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/jobs/recovery_strategy.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/jobs/scheduler.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/jobs/server/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/jobs/server/core.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/jobs/server/server.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/jobs/server/utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/jobs/utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/logs/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/logs/agent.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/logs/gcp.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/metrics/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/metrics/utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/models.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/optimizer.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/provision/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/provision/aws/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/provision/aws/config.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/provision/aws/instance.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/provision/aws/utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/provision/azure/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/provision/azure/azure-config-template.json +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/provision/azure/config.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/provision/azure/instance.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/provision/common.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/provision/constants.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/provision/cudo/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/provision/cudo/config.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/provision/cudo/cudo_machine_type.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/provision/cudo/cudo_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/provision/cudo/cudo_wrapper.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/provision/cudo/instance.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/provision/do/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/provision/do/config.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/provision/do/constants.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/provision/do/instance.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/provision/do/utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/provision/docker_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/provision/fluidstack/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/provision/fluidstack/config.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/provision/fluidstack/fluidstack_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/provision/fluidstack/instance.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/provision/gcp/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/provision/gcp/config.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/provision/gcp/constants.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/provision/gcp/instance.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/provision/gcp/instance_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/provision/gcp/mig_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/provision/gcp/volume_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/provision/hyperbolic/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/provision/hyperbolic/config.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/provision/hyperbolic/instance.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/provision/hyperbolic/utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/provision/instance_setup.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/provision/kubernetes/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/provision/kubernetes/config.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/provision/kubernetes/constants.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/provision/kubernetes/instance.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/provision/kubernetes/manifests/fusermount-server-daemonset.yaml +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/provision/kubernetes/network.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/provision/kubernetes/network_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/provision/kubernetes/utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/provision/kubernetes/volume.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/provision/lambda_cloud/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/provision/lambda_cloud/config.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/provision/lambda_cloud/instance.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/provision/lambda_cloud/lambda_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/provision/logging.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/provision/metadata_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/provision/nebius/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/provision/nebius/config.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/provision/nebius/constants.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/provision/nebius/instance.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/provision/oci/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/provision/oci/config.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/provision/oci/instance.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/provision/oci/query_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/provision/paperspace/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/provision/paperspace/config.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/provision/paperspace/constants.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/provision/paperspace/instance.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/provision/paperspace/utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/provision/provisioner.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/provision/runpod/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/provision/runpod/api/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/provision/runpod/api/commands.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/provision/runpod/api/pods.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/provision/runpod/config.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/provision/runpod/instance.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/provision/runpod/utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/provision/scp/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/provision/scp/config.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/provision/scp/instance.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/provision/ssh/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/provision/vast/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/provision/vast/config.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/provision/vast/instance.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/provision/vast/utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/provision/vsphere/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/provision/vsphere/common/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/provision/vsphere/common/cls_api_client.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/provision/vsphere/common/cls_api_helper.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/provision/vsphere/common/custom_script.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/provision/vsphere/common/id_generator.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/provision/vsphere/common/metadata_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/provision/vsphere/common/service_manager.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/provision/vsphere/common/service_manager_factory.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/provision/vsphere/common/ssl_helper.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/provision/vsphere/common/vapiconnect.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/provision/vsphere/common/vim_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/provision/vsphere/config.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/provision/vsphere/instance.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/provision/vsphere/vsphere_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/resources.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/schemas/db/README +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/schemas/db/env.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/schemas/db/global_user_state/001_initial_schema.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/schemas/db/script.py.mako +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/schemas/db/spot_jobs/001_initial_schema.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/serve/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/serve/autoscalers.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/serve/client/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/serve/client/sdk.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/serve/constants.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/serve/controller.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/serve/load_balancer.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/serve/load_balancing_policies.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/serve/replica_managers.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/serve/serve_state.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/serve/serve_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/serve/server/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/serve/server/core.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/serve/server/server.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/serve/service.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/serve/service_spec.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/serve/spot_placer.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/server/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/server/config.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/server/constants.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/server/html/log.html +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/server/html/token_page.html +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/server/metrics.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/server/requests/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/server/requests/event_loop.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/server/requests/executor.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/server/requests/payloads.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/server/requests/preconditions.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/server/requests/process.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/server/requests/queues/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/server/requests/queues/local_queue.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/server/requests/queues/mp_queue.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/server/requests/requests.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/server/requests/serializers/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/server/requests/serializers/decoders.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/server/requests/serializers/encoders.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/server/rest.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/server/server.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/server/state.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/server/stream_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/server/uvicorn.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/server/versions.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/setup_files/dependencies.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/setup_files/setup.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/sky_logging.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/skylet/LICENSE +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/skylet/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/skylet/attempt_skylet.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/skylet/autostop_lib.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/skylet/configs.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/skylet/events.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/skylet/job_lib.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/skylet/log_lib.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/skylet/log_lib.pyi +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/skylet/providers/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/skylet/providers/command_runner.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/skylet/providers/ibm/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/skylet/providers/ibm/node_provider.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/skylet/providers/ibm/utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/skylet/providers/ibm/vpc_provider.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/skylet/ray_patches/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/skylet/ray_patches/autoscaler.py.patch +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/skylet/ray_patches/cli.py.patch +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/skylet/ray_patches/command_runner.py.patch +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/skylet/ray_patches/log_monitor.py.patch +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/skylet/ray_patches/resource_demand_scheduler.py.patch +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/skylet/ray_patches/updater.py.patch +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/skylet/ray_patches/worker.py.patch +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/skylet/skylet.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/skylet/subprocess_daemon.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/ssh_node_pools/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/ssh_node_pools/core.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/ssh_node_pools/server.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/task.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/templates/aws-ray.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/templates/azure-ray.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/templates/cudo-ray.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/templates/do-ray.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/templates/fluidstack-ray.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/templates/gcp-ray.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/templates/hyperbolic-ray.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/templates/ibm-ray.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/templates/jobs-controller.yaml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/templates/kubernetes-ingress.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/templates/kubernetes-loadbalancer.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/templates/kubernetes-port-forward-proxy-command.sh +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/templates/kubernetes-ray.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/templates/kubernetes-ssh-jump.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/templates/lambda-ray.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/templates/local-ray.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/templates/nebius-ray.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/templates/oci-ray.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/templates/paperspace-ray.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/templates/runpod-ray.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/templates/scp-ray.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/templates/sky-serve-controller.yaml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/templates/skypilot-server-kubernetes-proxy.sh +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/templates/vast-ray.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/templates/vsphere-ray.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/templates/websocket_proxy.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/usage/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/usage/constants.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/usage/usage_lib.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/users/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/users/model.conf +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/users/permission.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/users/rbac.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/users/server.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/users/token_service.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/utils/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/utils/accelerator_registry.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/utils/admin_policy_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/utils/annotations.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/utils/atomic.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/utils/aws/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/utils/aws/get_default_security_group.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/utils/cli_utils/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/utils/cli_utils/status_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/utils/cluster_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/utils/command_runner.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/utils/command_runner.pyi +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/utils/common.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/utils/context.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/utils/context_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/utils/control_master_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/utils/controller_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/utils/dag_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/utils/db/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/utils/db/db_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/utils/env_options.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/utils/git.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/utils/git_clone.sh +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/utils/infra_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/utils/kubernetes/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/utils/kubernetes/cleanup-tunnel.sh +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/utils/kubernetes/config_map_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/utils/kubernetes/create_cluster.sh +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/utils/kubernetes/delete_cluster.sh +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/utils/kubernetes/deploy_remote_cluster.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/utils/kubernetes/exec_kubeconfig_converter.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/utils/kubernetes/generate_kind_config.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/utils/kubernetes/generate_kubeconfig.sh +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/utils/kubernetes/gpu_labeler.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/utils/kubernetes/k8s_gpu_labeler_job.yaml +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/utils/kubernetes/k8s_gpu_labeler_setup.yaml +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/utils/kubernetes/kubernetes_deploy_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/utils/kubernetes/rsync_helper.sh +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/utils/kubernetes/ssh-tunnel.sh +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/utils/kubernetes/ssh_jump_lifecycle_manager.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/utils/kubernetes/ssh_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/utils/kubernetes_enums.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/utils/log_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/utils/message_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/utils/registry.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/utils/resource_checker.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/utils/resources_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/utils/rich_console_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/utils/rich_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/utils/status_lib.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/utils/subprocess_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/utils/tempstore.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/utils/ux_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/utils/validator.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/volumes/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/volumes/client/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/volumes/client/sdk.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/volumes/server/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/volumes/server/core.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/volumes/server/server.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/volumes/utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/volumes/volume.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/workspaces/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/workspaces/core.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/workspaces/server.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/workspaces/utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/skypilot_nightly.egg-info/dependency_links.txt +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/skypilot_nightly.egg-info/entry_points.txt +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/skypilot_nightly.egg-info/requires.txt +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/skypilot_nightly.egg-info/top_level.txt +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/tests/test_api.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/tests/test_api_compatibility.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/tests/test_cli.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/tests/test_db_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/tests/test_failover.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/tests/test_global_user_state.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/tests/test_jobs.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/tests/test_jobs_and_serve.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/tests/test_list_accelerators.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/tests/test_no_parellel.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/tests/test_optimizer_dryruns.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/tests/test_optimizer_random_dag.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/tests/test_serve_autoscaler.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/tests/test_smoke.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/tests/test_storage.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/tests/test_wheels.py +0 -0
- {skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/tests/test_yaml_parser.py +0 -0
|
@@ -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 = '
|
|
8
|
+
_SKYPILOT_COMMIT_SHA = '874bc28c3a4b7322d30cfc544b257647379b59ed'
|
|
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.
|
|
38
|
+
__version__ = '1.0.0.dev20250723'
|
|
39
39
|
__root_dir__ = os.path.dirname(os.path.abspath(__file__))
|
|
40
40
|
|
|
41
41
|
|
{skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/admin_policy.py
RENAMED
|
@@ -121,11 +121,17 @@ class MutatedUserRequest:
|
|
|
121
121
|
dict(self.skypilot_config),)).model_dump_json()
|
|
122
122
|
|
|
123
123
|
@classmethod
|
|
124
|
-
def decode(cls, mutated_user_request_body: str
|
|
124
|
+
def decode(cls, mutated_user_request_body: str,
|
|
125
|
+
original_request: UserRequest) -> 'MutatedUserRequest':
|
|
125
126
|
mutated_user_request_body = _MutatedUserRequestBody.model_validate_json(
|
|
126
127
|
mutated_user_request_body)
|
|
127
|
-
|
|
128
|
-
common_utils.read_yaml_all_str(mutated_user_request_body.task)[0])
|
|
128
|
+
task = sky.Task.from_yaml_config(
|
|
129
|
+
common_utils.read_yaml_all_str(mutated_user_request_body.task)[0])
|
|
130
|
+
# Some internal Task fields are not serialized. We need to manually
|
|
131
|
+
# restore them from the original request.
|
|
132
|
+
task.managed_job_dag = original_request.task.managed_job_dag
|
|
133
|
+
task.service_name = original_request.task.service_name
|
|
134
|
+
return cls(task=task,
|
|
129
135
|
skypilot_config=config_utils.Config.from_dict(
|
|
130
136
|
common_utils.read_yaml_all_str(
|
|
131
137
|
mutated_user_request_body.skypilot_config)[0],))
|
|
@@ -243,7 +249,8 @@ class RestfulAdminPolicy(PolicyTemplate):
|
|
|
243
249
|
f'{self.policy_url}: {e}') from None
|
|
244
250
|
|
|
245
251
|
try:
|
|
246
|
-
mutated_user_request = MutatedUserRequest.decode(
|
|
252
|
+
mutated_user_request = MutatedUserRequest.decode(
|
|
253
|
+
response.json(), user_request)
|
|
247
254
|
except Exception as e: # pylint: disable=broad-except
|
|
248
255
|
with ux_utils.print_exception_no_traceback():
|
|
249
256
|
raise exceptions.RestfulPolicyError(
|
|
@@ -17,7 +17,6 @@ from typing import Any, Dict, List, Optional, Sequence, Set, Tuple, Union
|
|
|
17
17
|
import uuid
|
|
18
18
|
|
|
19
19
|
import colorama
|
|
20
|
-
import filelock
|
|
21
20
|
from packaging import version
|
|
22
21
|
from typing_extensions import Literal
|
|
23
22
|
|
|
@@ -45,6 +44,7 @@ from sky.utils import common_utils
|
|
|
45
44
|
from sky.utils import context_utils
|
|
46
45
|
from sky.utils import controller_utils
|
|
47
46
|
from sky.utils import env_options
|
|
47
|
+
from sky.utils import locks
|
|
48
48
|
from sky.utils import registry
|
|
49
49
|
from sky.utils import resources_utils
|
|
50
50
|
from sky.utils import rich_utils
|
|
@@ -110,17 +110,12 @@ _TEST_IP_LIST = ['https://8.8.8.8', 'https://1.1.1.1']
|
|
|
110
110
|
# Note: This value cannot be too small, otherwise OOM issue may occur.
|
|
111
111
|
DEFAULT_TASK_CPU_DEMAND = 0.5
|
|
112
112
|
|
|
113
|
-
# Filelocks for the cluster status change.
|
|
114
|
-
CLUSTER_STATUS_LOCK_PATH = os.path.expanduser('~/.sky/.{}.lock')
|
|
115
113
|
CLUSTER_STATUS_LOCK_TIMEOUT_SECONDS = 20
|
|
116
114
|
|
|
117
115
|
# Time that must elapse since the last status check before we should re-check if
|
|
118
116
|
# the cluster has been terminated or autostopped.
|
|
119
117
|
_CLUSTER_STATUS_CACHE_DURATION_SECONDS = 2
|
|
120
118
|
|
|
121
|
-
# Filelocks for updating cluster's file_mounts.
|
|
122
|
-
CLUSTER_FILE_MOUNTS_LOCK_PATH = os.path.expanduser(
|
|
123
|
-
'~/.sky/.{}_file_mounts.lock')
|
|
124
119
|
CLUSTER_FILE_MOUNTS_LOCK_TIMEOUT_SECONDS = 10
|
|
125
120
|
|
|
126
121
|
# Remote dir that holds our runtime files.
|
|
@@ -2005,9 +2000,20 @@ def _update_cluster_status(cluster_name: str) -> Optional[Dict[str, Any]]:
|
|
|
2005
2000
|
|
|
2006
2001
|
total_nodes = handle.launched_nodes * handle.num_ips_per_node
|
|
2007
2002
|
|
|
2003
|
+
cloud_name = repr(handle.launched_resources.cloud).lower()
|
|
2008
2004
|
for i in range(5):
|
|
2009
|
-
|
|
2010
|
-
|
|
2005
|
+
try:
|
|
2006
|
+
ready_head, ready_workers, output, stderr = (
|
|
2007
|
+
get_node_counts_from_ray_status(head_runner))
|
|
2008
|
+
except RuntimeError as e:
|
|
2009
|
+
logger.debug(f'Refreshing status ({cluster_name!r}) attempt'
|
|
2010
|
+
f' {i}: {common_utils.format_exception(e)}')
|
|
2011
|
+
if cloud_name != 'kubernetes':
|
|
2012
|
+
raise e
|
|
2013
|
+
# We retry for kubernetes because coreweave can have a
|
|
2014
|
+
# transient network issue.
|
|
2015
|
+
time.sleep(1)
|
|
2016
|
+
continue
|
|
2011
2017
|
if ready_head + ready_workers == total_nodes:
|
|
2012
2018
|
return True
|
|
2013
2019
|
logger.debug(f'Refreshing status ({cluster_name!r}) attempt '
|
|
@@ -2294,8 +2300,7 @@ def refresh_cluster_record(
|
|
|
2294
2300
|
|
|
2295
2301
|
# The loop logic allows us to notice if the status was updated in the
|
|
2296
2302
|
# global_user_state by another process and stop trying to get the lock.
|
|
2297
|
-
|
|
2298
|
-
lock = filelock.FileLock(CLUSTER_STATUS_LOCK_PATH.format(cluster_name))
|
|
2303
|
+
lock = locks.get_lock(cluster_status_lock_id(cluster_name))
|
|
2299
2304
|
start_time = time.perf_counter()
|
|
2300
2305
|
|
|
2301
2306
|
# Loop until we have an up-to-date status or until we acquire the lock.
|
|
@@ -2319,7 +2324,8 @@ def refresh_cluster_record(
|
|
|
2319
2324
|
return record
|
|
2320
2325
|
# Update and return the cluster status.
|
|
2321
2326
|
return _update_cluster_status(cluster_name)
|
|
2322
|
-
|
|
2327
|
+
|
|
2328
|
+
except locks.LockTimeout:
|
|
2323
2329
|
# lock.acquire() will throw a Timeout exception if the lock is not
|
|
2324
2330
|
# available and we have blocking=False.
|
|
2325
2331
|
pass
|
|
@@ -3197,3 +3203,13 @@ def get_endpoints(cluster: str,
|
|
|
3197
3203
|
return {
|
|
3198
3204
|
port_num: urls[0].url() for port_num, urls in port_details.items()
|
|
3199
3205
|
}
|
|
3206
|
+
|
|
3207
|
+
|
|
3208
|
+
def cluster_status_lock_id(cluster_name: str) -> str:
|
|
3209
|
+
"""Get the lock ID for cluster status operations."""
|
|
3210
|
+
return f'{cluster_name}_status'
|
|
3211
|
+
|
|
3212
|
+
|
|
3213
|
+
def cluster_file_mounts_lock_id(cluster_name: str) -> str:
|
|
3214
|
+
"""Get the lock ID for cluster file mounts operations."""
|
|
3215
|
+
return f'{cluster_name}_file_mounts'
|
|
@@ -20,7 +20,6 @@ from typing import (Any, Callable, Dict, Iterable, List, Optional, Set, Tuple,
|
|
|
20
20
|
Union)
|
|
21
21
|
|
|
22
22
|
import colorama
|
|
23
|
-
import filelock
|
|
24
23
|
import yaml
|
|
25
24
|
|
|
26
25
|
import sky
|
|
@@ -64,6 +63,7 @@ from sky.utils import common_utils
|
|
|
64
63
|
from sky.utils import context_utils
|
|
65
64
|
from sky.utils import controller_utils
|
|
66
65
|
from sky.utils import env_options
|
|
66
|
+
from sky.utils import locks
|
|
67
67
|
from sky.utils import log_utils
|
|
68
68
|
from sky.utils import message_utils
|
|
69
69
|
from sky.utils import registry
|
|
@@ -2916,9 +2916,8 @@ class CloudVmRayBackend(backends.Backend['CloudVmRayResourceHandle']):
|
|
|
2916
2916
|
# Check if the cluster is owned by the current user. Raise
|
|
2917
2917
|
# exceptions.ClusterOwnerIdentityMismatchError
|
|
2918
2918
|
backend_utils.check_owner_identity(cluster_name)
|
|
2919
|
-
|
|
2920
|
-
|
|
2921
|
-
with timeline.FileLockEvent(lock_path):
|
|
2919
|
+
lock_id = backend_utils.cluster_status_lock_id(cluster_name)
|
|
2920
|
+
with timeline.DistributedLockEvent(lock_id):
|
|
2922
2921
|
# Try to launch the exiting cluster first. If no existing cluster,
|
|
2923
2922
|
# this function will create a to_provision_config with required
|
|
2924
2923
|
# resources.
|
|
@@ -3065,7 +3064,7 @@ class CloudVmRayBackend(backends.Backend['CloudVmRayResourceHandle']):
|
|
|
3065
3064
|
|
|
3066
3065
|
self._update_after_cluster_provisioned(
|
|
3067
3066
|
handle, to_provision_config.prev_handle, task,
|
|
3068
|
-
prev_cluster_status,
|
|
3067
|
+
prev_cluster_status, lock_id, config_hash)
|
|
3069
3068
|
return handle, False
|
|
3070
3069
|
|
|
3071
3070
|
cluster_config_file = config_dict['ray']
|
|
@@ -3137,7 +3136,7 @@ class CloudVmRayBackend(backends.Backend['CloudVmRayResourceHandle']):
|
|
|
3137
3136
|
|
|
3138
3137
|
self._update_after_cluster_provisioned(
|
|
3139
3138
|
handle, to_provision_config.prev_handle, task,
|
|
3140
|
-
prev_cluster_status,
|
|
3139
|
+
prev_cluster_status, lock_id, config_hash)
|
|
3141
3140
|
return handle, False
|
|
3142
3141
|
|
|
3143
3142
|
def _open_ports(self, handle: CloudVmRayResourceHandle) -> None:
|
|
@@ -3155,7 +3154,7 @@ class CloudVmRayBackend(backends.Backend['CloudVmRayResourceHandle']):
|
|
|
3155
3154
|
prev_handle: Optional[CloudVmRayResourceHandle],
|
|
3156
3155
|
task: task_lib.Task,
|
|
3157
3156
|
prev_cluster_status: Optional[status_lib.ClusterStatus],
|
|
3158
|
-
|
|
3157
|
+
lock_id: str, config_hash: str) -> None:
|
|
3159
3158
|
usage_lib.messages.usage.update_cluster_resources(
|
|
3160
3159
|
handle.launched_nodes, handle.launched_resources)
|
|
3161
3160
|
usage_lib.messages.usage.update_final_cluster_status(
|
|
@@ -3237,7 +3236,7 @@ class CloudVmRayBackend(backends.Backend['CloudVmRayResourceHandle']):
|
|
|
3237
3236
|
handle.cached_external_ssh_ports, handle.docker_user,
|
|
3238
3237
|
handle.ssh_user)
|
|
3239
3238
|
|
|
3240
|
-
|
|
3239
|
+
locks.get_lock(lock_id).force_unlock()
|
|
3241
3240
|
|
|
3242
3241
|
def _sync_workdir(self, handle: CloudVmRayResourceHandle,
|
|
3243
3242
|
workdir: Union[Path, Dict[str, Any]],
|
|
@@ -3819,8 +3818,8 @@ class CloudVmRayBackend(backends.Backend['CloudVmRayResourceHandle']):
|
|
|
3819
3818
|
is_identity_mismatch_and_purge = True
|
|
3820
3819
|
else:
|
|
3821
3820
|
raise
|
|
3822
|
-
|
|
3823
|
-
|
|
3821
|
+
lock_id = backend_utils.cluster_status_lock_id(cluster_name)
|
|
3822
|
+
lock = locks.get_lock(lock_id)
|
|
3824
3823
|
# Retry in case new cluster operation comes in and holds the lock
|
|
3825
3824
|
# right after the lock is removed.
|
|
3826
3825
|
n_attempts = 2
|
|
@@ -3828,7 +3827,7 @@ class CloudVmRayBackend(backends.Backend['CloudVmRayResourceHandle']):
|
|
|
3828
3827
|
n_attempts -= 1
|
|
3829
3828
|
# In case other running cluster operations are still holding the
|
|
3830
3829
|
# lock.
|
|
3831
|
-
|
|
3830
|
+
lock.force_unlock()
|
|
3832
3831
|
# We have to kill the cluster requests, because `down` and `stop`
|
|
3833
3832
|
# should be higher priority than the cluster requests, and we should
|
|
3834
3833
|
# release the lock from other requests.
|
|
@@ -3847,9 +3846,7 @@ class CloudVmRayBackend(backends.Backend['CloudVmRayResourceHandle']):
|
|
|
3847
3846
|
f'cluster {handle.cluster_name}: '
|
|
3848
3847
|
f'{common_utils.format_exception(e, use_bracket=True)}')
|
|
3849
3848
|
try:
|
|
3850
|
-
with
|
|
3851
|
-
lock_path,
|
|
3852
|
-
backend_utils.CLUSTER_STATUS_LOCK_TIMEOUT_SECONDS):
|
|
3849
|
+
with lock:
|
|
3853
3850
|
self.teardown_no_lock(
|
|
3854
3851
|
handle,
|
|
3855
3852
|
terminate,
|
|
@@ -3862,14 +3859,14 @@ class CloudVmRayBackend(backends.Backend['CloudVmRayResourceHandle']):
|
|
|
3862
3859
|
refresh_cluster_status=(
|
|
3863
3860
|
not is_identity_mismatch_and_purge))
|
|
3864
3861
|
if terminate:
|
|
3865
|
-
|
|
3862
|
+
lock.force_unlock()
|
|
3866
3863
|
break
|
|
3867
|
-
except
|
|
3864
|
+
except locks.LockTimeout as e:
|
|
3868
3865
|
logger.debug(f'Failed to acquire lock for {cluster_name}, '
|
|
3869
3866
|
f'retrying...')
|
|
3870
3867
|
if n_attempts <= 0:
|
|
3871
3868
|
raise RuntimeError(
|
|
3872
|
-
f'Cluster {cluster_name!r} is locked by {
|
|
3869
|
+
f'Cluster {cluster_name!r} is locked by {lock_id}. '
|
|
3873
3870
|
'Check to see if it is still being launched') from e
|
|
3874
3871
|
|
|
3875
3872
|
# --- CloudVMRayBackend Specific APIs ---
|
|
@@ -5245,18 +5242,17 @@ class CloudVmRayBackend(backends.Backend['CloudVmRayResourceHandle']):
|
|
|
5245
5242
|
# reconstruct them during cluster restart.
|
|
5246
5243
|
continue
|
|
5247
5244
|
storage_mounts_metadata[dst] = storage_obj.handle
|
|
5248
|
-
|
|
5249
|
-
backend_utils.CLUSTER_FILE_MOUNTS_LOCK_PATH.format(cluster_name))
|
|
5245
|
+
lock_id = backend_utils.cluster_file_mounts_lock_id(cluster_name)
|
|
5250
5246
|
lock_timeout = backend_utils.CLUSTER_FILE_MOUNTS_LOCK_TIMEOUT_SECONDS
|
|
5251
5247
|
try:
|
|
5252
|
-
with
|
|
5248
|
+
with locks.get_lock(lock_id, lock_timeout):
|
|
5253
5249
|
global_user_state.set_cluster_storage_mounts_metadata(
|
|
5254
5250
|
cluster_name, storage_mounts_metadata)
|
|
5255
|
-
except
|
|
5251
|
+
except locks.LockTimeout as e:
|
|
5256
5252
|
raise RuntimeError(
|
|
5257
5253
|
f'Failed to store metadata for cluster {cluster_name!r} due to '
|
|
5258
5254
|
'a timeout when trying to access local database. Please '
|
|
5259
|
-
f'try again or manually remove the lock at {
|
|
5255
|
+
f'try again or manually remove the lock at {lock_id}. '
|
|
5260
5256
|
f'{common_utils.format_exception(e)}') from None
|
|
5261
5257
|
|
|
5262
5258
|
def get_storage_mounts_metadata(
|
|
@@ -5267,19 +5263,18 @@ class CloudVmRayBackend(backends.Backend['CloudVmRayResourceHandle']):
|
|
|
5267
5263
|
After retrieving storage_mounts_metadata, it converts back the
|
|
5268
5264
|
StorageMetadata to Storage object and restores 'storage_mounts.'
|
|
5269
5265
|
"""
|
|
5270
|
-
|
|
5271
|
-
backend_utils.CLUSTER_FILE_MOUNTS_LOCK_PATH.format(cluster_name))
|
|
5266
|
+
lock_id = backend_utils.cluster_file_mounts_lock_id(cluster_name)
|
|
5272
5267
|
lock_timeout = backend_utils.CLUSTER_FILE_MOUNTS_LOCK_TIMEOUT_SECONDS
|
|
5273
5268
|
try:
|
|
5274
|
-
with
|
|
5269
|
+
with locks.get_lock(lock_id, lock_timeout):
|
|
5275
5270
|
storage_mounts_metadata = (
|
|
5276
5271
|
global_user_state.get_cluster_storage_mounts_metadata(
|
|
5277
5272
|
cluster_name))
|
|
5278
|
-
except
|
|
5273
|
+
except locks.LockTimeout as e:
|
|
5279
5274
|
raise RuntimeError(
|
|
5280
5275
|
f'Failed to retrieve metadata for cluster {cluster_name!r} '
|
|
5281
5276
|
'due to a timeout when trying to access local database. '
|
|
5282
|
-
f'Please try again or manually remove the lock at {
|
|
5277
|
+
f'Please try again or manually remove the lock at {lock_id}.'
|
|
5283
5278
|
f' {common_utils.format_exception(e)}') from None
|
|
5284
5279
|
|
|
5285
5280
|
if storage_mounts_metadata is None:
|
{skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/client/cli/command.py
RENAMED
|
@@ -3023,17 +3023,18 @@ def _down_or_stop_clusters(
|
|
|
3023
3023
|
click.echo(common_utils.format_exception(e))
|
|
3024
3024
|
else:
|
|
3025
3025
|
raise
|
|
3026
|
-
|
|
3027
|
-
|
|
3028
|
-
|
|
3029
|
-
|
|
3030
|
-
|
|
3031
|
-
|
|
3032
|
-
|
|
3033
|
-
|
|
3034
|
-
|
|
3035
|
-
|
|
3036
|
-
|
|
3026
|
+
if not purge:
|
|
3027
|
+
confirm_str = 'delete'
|
|
3028
|
+
user_input = click.prompt(
|
|
3029
|
+
f'To proceed, please type {colorama.Style.BRIGHT}'
|
|
3030
|
+
f'{confirm_str!r}{colorama.Style.RESET_ALL}',
|
|
3031
|
+
type=str)
|
|
3032
|
+
if user_input != confirm_str:
|
|
3033
|
+
raise click.Abort()
|
|
3034
|
+
else:
|
|
3035
|
+
click.echo('Since --purge is set, errors will be ignored '
|
|
3036
|
+
'and controller will be removed from '
|
|
3037
|
+
'local state.\nSkipping confirmation.')
|
|
3037
3038
|
no_confirm = True
|
|
3038
3039
|
names += controllers
|
|
3039
3040
|
|
|
@@ -5508,19 +5509,27 @@ def api_status(request_ids: Optional[List[str]], all_status: bool,
|
|
|
5508
5509
|
columns.append('Cluster')
|
|
5509
5510
|
columns.extend(['Created', 'Status'])
|
|
5510
5511
|
table = log_utils.create_table(columns)
|
|
5511
|
-
|
|
5512
|
-
|
|
5513
|
-
|
|
5514
|
-
|
|
5515
|
-
|
|
5516
|
-
|
|
5512
|
+
if len(request_list) > 0:
|
|
5513
|
+
for request in request_list:
|
|
5514
|
+
r_id = request.request_id
|
|
5515
|
+
if not verbose:
|
|
5516
|
+
r_id = common_utils.truncate_long_string(r_id, 36)
|
|
5517
|
+
req_status = requests.RequestStatus(request.status)
|
|
5518
|
+
row = [r_id, request.user_name, request.name]
|
|
5519
|
+
if verbose:
|
|
5520
|
+
row.append(request.cluster_name)
|
|
5521
|
+
row.extend([
|
|
5522
|
+
log_utils.readable_time_duration(request.created_at),
|
|
5523
|
+
req_status.colored_str()
|
|
5524
|
+
])
|
|
5525
|
+
table.add_row(row)
|
|
5526
|
+
else:
|
|
5527
|
+
# add dummy data for when api server is down.
|
|
5528
|
+
dummy_row = ['-'] * 5
|
|
5517
5529
|
if verbose:
|
|
5518
|
-
|
|
5519
|
-
|
|
5520
|
-
|
|
5521
|
-
req_status.colored_str()
|
|
5522
|
-
])
|
|
5523
|
-
table.add_row(row)
|
|
5530
|
+
dummy_row.append('-')
|
|
5531
|
+
table.add_row(dummy_row)
|
|
5532
|
+
click.echo()
|
|
5524
5533
|
click.echo(table)
|
|
5525
5534
|
|
|
5526
5535
|
|
|
@@ -5568,6 +5577,12 @@ def api_login(endpoint: Optional[str], relogin: bool,
|
|
|
5568
5577
|
sdk.api_login(endpoint, relogin, service_account_token)
|
|
5569
5578
|
|
|
5570
5579
|
|
|
5580
|
+
@api.command('logout', cls=_DocumentedCodeCommand)
|
|
5581
|
+
def api_logout():
|
|
5582
|
+
"""Logs out of the api server"""
|
|
5583
|
+
sdk.api_logout()
|
|
5584
|
+
|
|
5585
|
+
|
|
5571
5586
|
@api.command('info', cls=_DocumentedCodeCommand)
|
|
5572
5587
|
@flags.config_option(expose_value=False)
|
|
5573
5588
|
@usage_lib.entrypoint
|
|
@@ -1854,6 +1854,18 @@ def api_cancel(request_ids: Optional[Union[str, List[str]]] = None,
|
|
|
1854
1854
|
return server_common.get_request_id(response)
|
|
1855
1855
|
|
|
1856
1856
|
|
|
1857
|
+
def _local_api_server_running(kill: bool = False) -> bool:
|
|
1858
|
+
"""Checks if the local api server is running."""
|
|
1859
|
+
for process in psutil.process_iter(attrs=['pid', 'cmdline']):
|
|
1860
|
+
cmdline = process.info['cmdline']
|
|
1861
|
+
if cmdline and server_common.API_SERVER_CMD in ' '.join(cmdline):
|
|
1862
|
+
if kill:
|
|
1863
|
+
subprocess_utils.kill_children_processes(
|
|
1864
|
+
parent_pids=[process.pid], force=True)
|
|
1865
|
+
return True
|
|
1866
|
+
return False
|
|
1867
|
+
|
|
1868
|
+
|
|
1857
1869
|
@usage_lib.entrypoint
|
|
1858
1870
|
@annotations.client_api
|
|
1859
1871
|
def api_status(
|
|
@@ -1872,6 +1884,10 @@ def api_status(
|
|
|
1872
1884
|
Returns:
|
|
1873
1885
|
A list of request payloads.
|
|
1874
1886
|
"""
|
|
1887
|
+
if server_common.is_api_server_local() and not _local_api_server_running():
|
|
1888
|
+
logger.info('SkyPilot API server is not running.')
|
|
1889
|
+
return []
|
|
1890
|
+
|
|
1875
1891
|
body = payloads.RequestStatusBody(request_ids=request_ids,
|
|
1876
1892
|
all_status=all_status)
|
|
1877
1893
|
response = server_common.make_authenticated_request(
|
|
@@ -1992,13 +2008,7 @@ def api_stop() -> None:
|
|
|
1992
2008
|
f'Cannot kill the API server at {server_url} because it is not '
|
|
1993
2009
|
f'the default SkyPilot API server started locally.')
|
|
1994
2010
|
|
|
1995
|
-
found =
|
|
1996
|
-
for process in psutil.process_iter(attrs=['pid', 'cmdline']):
|
|
1997
|
-
cmdline = process.info['cmdline']
|
|
1998
|
-
if cmdline and server_common.API_SERVER_CMD in ' '.join(cmdline):
|
|
1999
|
-
subprocess_utils.kill_children_processes(parent_pids=[process.pid],
|
|
2000
|
-
force=True)
|
|
2001
|
-
found = True
|
|
2011
|
+
found = _local_api_server_running(kill=True)
|
|
2002
2012
|
|
|
2003
2013
|
# Remove the database for requests.
|
|
2004
2014
|
server_common.clear_local_api_server_database()
|
|
@@ -2067,6 +2077,22 @@ def _save_config_updates(endpoint: Optional[str] = None,
|
|
|
2067
2077
|
skypilot_config.reload_config()
|
|
2068
2078
|
|
|
2069
2079
|
|
|
2080
|
+
def _clear_api_server_config() -> None:
|
|
2081
|
+
"""Clear endpoint and service account token from config file."""
|
|
2082
|
+
config_path = pathlib.Path(
|
|
2083
|
+
skypilot_config.get_user_config_path()).expanduser()
|
|
2084
|
+
with filelock.FileLock(config_path.with_suffix('.lock')):
|
|
2085
|
+
if not config_path.exists():
|
|
2086
|
+
return
|
|
2087
|
+
|
|
2088
|
+
config = skypilot_config.get_user_config()
|
|
2089
|
+
config = dict(config)
|
|
2090
|
+
del config['api_server']
|
|
2091
|
+
|
|
2092
|
+
common_utils.dump_yaml(str(config_path), config, blank=True)
|
|
2093
|
+
skypilot_config.reload_config()
|
|
2094
|
+
|
|
2095
|
+
|
|
2070
2096
|
def _validate_endpoint(endpoint: Optional[str]) -> str:
|
|
2071
2097
|
"""Validate and normalize the endpoint URL."""
|
|
2072
2098
|
if endpoint is None:
|
|
@@ -2323,3 +2349,22 @@ def api_login(endpoint: Optional[str] = None,
|
|
|
2323
2349
|
endpoint)
|
|
2324
2350
|
_show_logged_in_message(endpoint, dashboard_url, final_api_server_info.user,
|
|
2325
2351
|
server_status)
|
|
2352
|
+
|
|
2353
|
+
|
|
2354
|
+
@usage_lib.entrypoint
|
|
2355
|
+
@annotations.client_api
|
|
2356
|
+
def api_logout() -> None:
|
|
2357
|
+
"""Logout of the API server.
|
|
2358
|
+
|
|
2359
|
+
Clears all cookies and settings stored in ~/.sky/config.yaml"""
|
|
2360
|
+
if server_common.is_api_server_local():
|
|
2361
|
+
with ux_utils.print_exception_no_traceback():
|
|
2362
|
+
raise RuntimeError('Local api server cannot be logged out. '
|
|
2363
|
+
'Use `sky api stop` instead.')
|
|
2364
|
+
|
|
2365
|
+
# no need to clear cookies if it doesn't exist.
|
|
2366
|
+
server_common.set_api_cookie_jar(cookiejar.MozillaCookieJar(),
|
|
2367
|
+
create_if_not_exists=False)
|
|
2368
|
+
_clear_api_server_config()
|
|
2369
|
+
logger.info(f'{colorama.Fore.GREEN}Logged out of SkyPilot API server.'
|
|
2370
|
+
f'{colorama.Style.RESET_ALL}')
|
{skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/clouds/nebius.py
RENAMED
|
@@ -234,11 +234,8 @@ class Nebius(clouds.Cloud):
|
|
|
234
234
|
|
|
235
235
|
config_fs = skypilot_config.get_effective_region_config(
|
|
236
236
|
cloud='nebius',
|
|
237
|
-
region=
|
|
238
|
-
keys=(
|
|
239
|
-
region.name,
|
|
240
|
-
'filesystems',
|
|
241
|
-
),
|
|
237
|
+
region=region.name,
|
|
238
|
+
keys=('filesystems',),
|
|
242
239
|
default_value=[])
|
|
243
240
|
resources_vars_fs = []
|
|
244
241
|
for i, fs in enumerate(config_fs):
|
{skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/clouds/vast.py
RENAMED
|
@@ -265,7 +265,8 @@ class Vast(clouds.Cloud):
|
|
|
265
265
|
'error \n' # First line is indented by 4 spaces
|
|
266
266
|
' Credentials can be set up by running: \n'
|
|
267
267
|
' $ pip install vastai\n'
|
|
268
|
-
' $
|
|
268
|
+
' $ mkdir -p ~/.config/vastai\n'
|
|
269
|
+
' $ echo [key] > ~/.config/vastai/vast_api_key\n'
|
|
269
270
|
' For more information, see https://skypilot.readthedocs.io/en/latest/getting-started/installation.html#vast' # pylint: disable=line-too-long
|
|
270
271
|
)
|
|
271
272
|
|
{skypilot_nightly-1.0.0.dev20250720 → skypilot_nightly-1.0.0.dev20250723}/sky/dashboard/out/404.html
RENAMED
|
@@ -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/
|
|
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-a305898dc479711e.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-efc06c2733009cd3.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-c0a4f1ea606d48d2.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-da491665d4289aae.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_error-c72a1f77a3c0be1b.js" defer=""></script><script src="/dashboard/_next/static/mym3Ciwp-zqU7ZpOLGnrW/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/mym3Ciwp-zqU7ZpOLGnrW/_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":"mym3Ciwp-zqU7ZpOLGnrW","assetPrefix":"/dashboard","nextExport":true,"isFallback":false,"gip":true,"scriptLoader":[]}</script></body></html>
|
|
@@ -8,4 +8,4 @@
|
|
|
8
8
|
*
|
|
9
9
|
* This source code is licensed under the ISC license.
|
|
10
10
|
* See the LICENSE file in the root directory of this source tree.
|
|
11
|
-
*/let a=(0,r(998).Z)("Trash",[["path",{d:"M3 6h18",key:"d0wm0j"}],["path",{d:"M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6",key:"4alrt4"}],["path",{d:"M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2",key:"v07s0e"}]])},1812:function(e,s,r){r.d(s,{X:function(){return n}});var a=r(5893),l=r(7294);let t=e=>{if(!(null==e?void 0:e.message))return"An unexpected error occurred.";let s=e.message;return s.includes("failed:")&&(s=s.split("failed:")[1].trim()),s},n=e=>{let{error:s,title:r="Error",onDismiss:n}=e,[c,i]=(0,l.useState)(!1);if((0,l.useEffect)(()=>{s&&i(!1)},[s]),!s||c)return null;let o="string"==typeof s?s:t(s);return(0,a.jsx)("div",{className:"bg-red-50 border border-red-200 rounded-md p-3 mb-4",children:(0,a.jsxs)("div",{className:"flex items-center justify-between",children:[(0,a.jsxs)("div",{className:"flex",children:[(0,a.jsx)("div",{className:"flex-shrink-0",children:(0,a.jsx)("svg",{className:"h-5 w-5 text-red-400",viewBox:"0 0 20 20",fill:"currentColor",children:(0,a.jsx)("path",{fillRule:"evenodd",d:"M10 18a8 8 0 100-16 8 8 0 000 16zM8.707 7.293a1 1 0 00-1.414 1.414L8.586 10l-1.293 1.293a1 1 0 101.414 1.414L10 11.414l1.293 1.293a1 1 0 001.414-1.414L11.414 10l1.293-1.293a1 1 0 00-1.414-1.414L10 8.586 8.707 7.293z",clipRule:"evenodd"})})}),(0,a.jsx)("div",{className:"ml-3",children:(0,a.jsxs)("div",{className:"text-sm text-red-800",children:[(0,a.jsxs)("strong",{children:[r,":"]})," ",o]})})]}),(0,a.jsx)("button",{onClick:()=>{i(!0),n&&n()},className:"flex-shrink-0 ml-4 text-red-400 hover:text-red-600 focus:outline-none focus:ring-2 focus:ring-red-500 focus:ring-offset-2 focus:ring-offset-red-50 rounded","aria-label":"Dismiss error",children:(0,a.jsx)("svg",{className:"h-4 w-4",viewBox:"0 0 20 20",fill:"currentColor",children:(0,a.jsx)("path",{fillRule:"evenodd",d:"M4.293 4.293a1 1 0 011.414 0L10 8.586l4.293-4.293a1 1 0 111.414 1.414L11.414 10l4.293 4.293a1 1 0 01-1.414 1.414L10 11.414l-4.293 4.293a1 1 0 01-1.414-1.414L8.586 10 4.293 5.707a1 1 0 010-1.414z",clipRule:"evenodd"})})})]})})}},9123:function(e,s,r){r.d(s,{g:function(){return n}});var a=r(5893),l=r(7294),t=r(2350);let n=l.forwardRef((e,s)=>{let{className:r,...l}=e;return(0,a.jsx)("textarea",{className:(0,t.cn)("flex min-h-[80px] w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50",r),ref:s,...l})});n.displayName="Textarea"},1141:function(e,s,r){r.r(s),r.d(s,{WorkspaceEditor:function(){return R}});var a=r(5893),l=r(7294),t=r(1163),n=r(7324),c=r(3266),i=r(8969);r(9470);var o=r(1664),d=r.n(o),u=r(9008),x=r.n(u),m=r(7673),h=r(803),f=r(9123),g=r(5739),p=r(282),b=r(6021),j=r(3626),y=r(8418),N=r(9333),v=r(326);let w=e=>{let{className:s="",variant:r="default",children:l,...t}=e;return(0,a.jsx)("div",{role:"alert",className:"".concat("relative w-full rounded-lg border p-4 flex items-start space-x-2"," ").concat({default:"bg-blue-50 border-blue-200 text-blue-800",destructive:"bg-red-50 border-red-200 text-red-800"}[r]," ").concat(s),...t,children:l})},k=e=>{let{className:s="",children:r,...l}=e;return(0,a.jsx)("div",{className:"text-sm leading-relaxed ".concat(s),...l,children:r})};var C=r(3850),L=r(1812),S=r(938),E=r(1272),Z=r(3225),D=r(3081);let M=e=>{let{message:s}=e;return s?(0,a.jsxs)(w,{className:"border-green-200 bg-green-50",children:[(0,a.jsx)(p.Z,{className:"h-4 w-4 text-green-600"}),(0,a.jsx)(k,{className:"text-green-800",children:s})]}):null},A=e=>{let{workspaceName:s,config:r,enabledClouds:l=[]}=e;if(!r)return null;let t="default"===s,n=0===Object.keys(r).length;if(t&&n)return(0,a.jsx)("div",{className:"text-sm text-gray-500 mb-3 italic p-3 bg-sky-50 rounded border border-sky-200",children:"Workspace 'default' can use all accessible infrastructure."});let c=[],i=[],o=[],d=new Set(l.map(e=>e.toLowerCase()));Object.entries(r).forEach(e=>{let[s,r]=e;if("private"===s||"allowed_users"===s)return;let l=Z.Z2[s.toLowerCase()]||s.toUpperCase(),t=d.has(null==l?void 0:l.toLowerCase());if((null==r?void 0:r.disabled)===!0)i.push(l);else if(r&&Object.keys(r).length>0){let e="";"gcp"===s.toLowerCase()&&r.project_id?e=" (Project ID: ".concat(r.project_id,")"):"aws"===s.toLowerCase()&&r.region&&(e=" (Region: ".concat(r.region,")")),t?c.push((0,a.jsxs)("span",{className:"block",children:[l,e," is enabled."]},"".concat(s,"-enabled"))):o.push((0,a.jsxs)("span",{className:"block text-amber-700",children:[l,e," is configured but not currently available."]},"".concat(s,"-configured-not-enabled")))}else t?c.push((0,a.jsxs)("span",{className:"block",children:[l," is enabled (using default settings)."]},"".concat(s,"-default-enabled"))):o.push((0,a.jsxs)("span",{className:"block text-amber-700",children:[l," is configured but not currently available."]},"".concat(s,"-default-not-enabled")))});let u=[];if(i.length>0){let e=i.join(" and ");u.push((0,a.jsxs)("span",{className:"block",children:[e," ",1===i.length?"is":"are"," explicitly disabled."]},"disabled-clouds"))}return(u.push(...c),u.push(...o),u.length>0)?(0,a.jsx)("div",{className:"text-sm text-gray-700 mb-3 p-3 bg-sky-50 rounded border border-sky-200",children:u}):!t&&n?(0,a.jsx)("div",{className:"text-sm text-gray-500 mb-3 italic p-3 bg-sky-50 rounded border border-sky-200",children:"This workspace has no specific cloud resource configurations and can use all accessible infrastructure."}):null},W=e=>{let{isPrivate:s}=e;return s?(0,a.jsx)("span",{className:"inline-flex items-center px-2 py-1 rounded-full text-xs font-medium bg-gray-100 text-gray-700 border border-gray-300",children:"Private"}):(0,a.jsx)("span",{className:"inline-flex items-center px-2 py-1 rounded-full text-xs font-medium bg-green-100 text-green-700 border border-green-300",children:"Public"})},P=e=>{let{workspaceConfig:s,allUsers:r}=e;if(!s.private)return null;let l=s.allowed_users||[],t=(r||[]).filter(e=>"admin"===e.role).map(e=>e.username),n=[...new Set([...l,...t])];return 0===n.length?(0,a.jsxs)("div",{className:"mt-4",children:[(0,a.jsx)("h4",{className:"mb-2 text-xs text-gray-500 tracking-wider",children:"Allowed Users (0)"}),(0,a.jsx)("div",{className:"text-amber-600 text-xs italic p-2 bg-amber-50 rounded border border-amber-200",children:"No users configured (workspace may be inaccessible)"})]}):(0,a.jsxs)("div",{className:"mt-4",children:[(0,a.jsxs)("h4",{className:"mb-2 text-xs text-gray-500 tracking-wider",children:["Allowed Users (",n.length,")"]}),(0,a.jsx)("div",{className:"space-y-1 max-h-48 overflow-y-auto border border-gray-200 rounded",children:n.map(e=>{let s=t.includes(e);return(0,a.jsxs)("div",{className:"flex items-center justify-between text-xs p-2 bg-gray-50 hover:bg-gray-100 border-b border-gray-100 last:border-b-0",children:[(0,a.jsx)("span",{className:"font-medium text-gray-700",children:e}),s?(0,a.jsxs)("span",{className:"inline-flex items-center text-blue-600",children:[(0,a.jsx)(C.r7,{className:"w-3 h-3 mr-1"}),"Admin"]}):(0,a.jsxs)("span",{className:"inline-flex items-center text-gray-600",children:[(0,a.jsx)(b.Z,{className:"w-3 h-3 mr-1"}),"User"]})]},e)})})]})};function R(e){let{workspaceName:s,isNewWorkspace:r=!1}=e,o=(0,t.useRouter)(),[u,p]=(0,l.useState)({}),[b,w]=(0,l.useState)({}),[k,Z]=(0,l.useState)(""),[R,_]=(0,l.useState)(!0),[z,O]=(0,l.useState)(!1),[T,U]=(0,l.useState)(!1),[Y,J]=(0,l.useState)(null),[I,V]=(0,l.useState)(null),[F,H]=(0,l.useState)(null),[X,B]=(0,l.useState)([]),[G,q]=(0,l.useState)({showDialog:!1,deleting:!1,error:null}),[K,Q]=(0,l.useState)({totalClusterCount:0,runningClusterCount:0,managedJobsCount:0,clouds:[]}),[$,ee]=(0,l.useState)(!1),es=(0,l.useCallback)(async()=>{_(!0),J(null);try{let e;let[r,a]=await Promise.all([(0,n.fX)(),(0,D.R)()]),l=r[s]||{};p(l),w(l),B(a||[]),e=0===Object.keys(l).length?"".concat(s,":\n # Empty workspace configuration - uses all accessible infrastructure\n"):E.ZP.dump({[s]:l},{indent:2,lineWidth:-1,noRefs:!0,skipInvalid:!0,flowLevel:-1}),Z(e)}catch(e){console.error("Error fetching workspace config:",e),J(e)}finally{_(!1)}},[s]),er=(0,l.useCallback)(async()=>{if(!r){ee(!0);try{let[e,r,a]=await Promise.all([(0,c.getClusters)(),(0,i.getManagedJobs)(),(0,n.yz)(s,!0)]),l=e.filter(e=>(e.workspace||"default")===s),t=l.filter(e=>"RUNNING"===e.status||"LAUNCHING"===e.status),o={};e.forEach(e=>{o[e.cluster]=e.workspace||"default"});let d=r.jobs||[],u=new Set(S.statusGroups.active),x=0;d.forEach(e=>{let r=e.cluster_name||e.resources&&e.resources.cluster_name;r&&o[r]===s&&u.has(e.status)&&x++}),Q({totalClusterCount:l.length,runningClusterCount:t.length,managedJobsCount:x,clouds:Array.isArray(a)?a:[]})}catch(e){console.error("Failed to fetch workspace stats:",e)}finally{ee(!1)}}},[s,r]);(0,l.useEffect)(()=>{r?(_(!1),Z("".concat(s,":\n # New workspace configuration\n # Leave empty to use all accessible infrastructure\n"))):(es(),er())},[s,r,es,er]),(0,l.useEffect)(()=>{U(JSON.stringify(u)!==JSON.stringify(b))},[u,b]);let ea=e=>{Z(e),H(null);try{let r=E.ZP.load(e)||{},a=Object.keys(r);if(0===a.length)p({});else if(1===a.length){let e=a[0];if(e!==s){H('Workspace name cannot be changed. Expected "'.concat(s,'" but found "').concat(e,'".'));return}let l=r[s]||{};p(l)}else H("Configuration must contain only one workspace. Found: ".concat(a.join(", ")))}catch(e){H("Invalid YAML: ".concat(e.message))}},el=async()=>{O(!0),J(null),V(null);try{if(F)throw Error("Please fix YAML errors before saving");let e=E.ZP.load(k)||{},a=Object.keys(e);if(a.length>0&&a[0]!==s)throw Error('Workspace name cannot be changed. Expected "'.concat(s,'".'));r?(await (0,n.MB)(s,u),V("Workspace created successfully!"),setTimeout(()=>{o.push("/workspaces/".concat(s))},1500)):(await (0,n.eA)(s,u),V("Workspace updated successfully!"),w(u),er())}catch(e){console.error("Error saving workspace:",e),J(e)}finally{O(!1)}},et=async()=>{q(e=>({...e,deleting:!0,error:null}));try{await (0,n.zl)(s),V("Workspace deleted successfully!"),setTimeout(()=>{o.push("/workspaces")},1500)}catch(e){console.error("Error deleting workspace:",e),q(s=>({...s,deleting:!1,error:e}))}},en=()=>{q({showDialog:!1,deleting:!1,error:null})},ec=async()=>{await Promise.all([es(),er()])};if(!o.isReady)return(0,a.jsx)("div",{children:"Loading..."});let ei=r?"Create New Workspace | SkyPilot Dashboard":"Workspace: ".concat(s," | SkyPilot Dashboard");return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(x(),{children:(0,a.jsx)("title",{children:ei})}),(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)("div",{className:"flex items-center justify-between mb-4 h-5",children:[(0,a.jsxs)("div",{className:"text-base flex items-center",children:[(0,a.jsx)(d(),{href:"/workspaces",className:"text-sky-blue hover:underline",children:"Workspaces"}),(0,a.jsx)("span",{className:"mx-2 text-gray-500",children:"›"}),(0,a.jsx)(d(),{href:r?"/workspace/new":"/workspaces/".concat(s),className:"text-sky-blue hover:underline",children:r?"New Workspace":s}),T&&(0,a.jsx)("span",{className:"ml-3 px-2 py-1 bg-yellow-100 text-yellow-800 text-xs rounded",children:"Unsaved changes"})]}),(0,a.jsxs)("div",{className:"text-sm flex items-center",children:[(R||z||$)&&(0,a.jsxs)("div",{className:"flex items-center mr-4",children:[(0,a.jsx)(g.Z,{size:15,className:"mt-0"}),(0,a.jsx)("span",{className:"ml-2 text-gray-500",children:z?"Saving...":"Loading..."})]}),(0,a.jsxs)("div",{className:"flex items-center space-x-4",children:[!r&&(0,a.jsxs)("button",{onClick:ec,disabled:R||z||$,className:"text-sky-blue hover:text-sky-blue-bright font-medium inline-flex items-center",children:[(0,a.jsx)(j.Z,{className:"w-4 h-4 mr-1.5"}),"Refresh"]}),!r&&"default"!==s&&(0,a.jsxs)("button",{onClick:()=>q({...G,showDialog:!0}),disabled:G.deleting||z,className:"text-red-600 hover:text-red-700 font-medium inline-flex items-center",children:[(0,a.jsx)(y.Z,{className:"w-4 h-4 mr-1.5"}),"Delete"]})]})]})]}),R?(0,a.jsxs)("div",{className:"flex justify-center items-center py-12",children:[(0,a.jsx)(g.Z,{size:24,className:"mr-2"}),(0,a.jsx)("span",{className:"text-gray-500",children:"Loading workspace configuration..."})]}):(0,a.jsxs)("div",{className:"space-y-6",children:[(0,a.jsx)(L.X,{error:Y,title:"Error",onDismiss:()=>J(null)}),(0,a.jsx)(M,{message:I}),(0,a.jsxs)("div",{className:"grid grid-cols-1 lg:grid-cols-3 gap-6",children:[!r&&(0,a.jsx)("div",{className:"lg:col-span-1",children:(0,a.jsxs)(m.Zb,{className:"h-full",children:[(0,a.jsx)(m.Ol,{children:(0,a.jsx)(m.ll,{className:"text-base font-normal",children:(0,a.jsxs)("div",{className:"flex items-center justify-between",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("span",{className:"font-semibold",children:"Workspace:"})," ",s]}),(0,a.jsx)(W,{isPrivate:!0===b.private})]})})}),(0,a.jsxs)(m.aY,{className:"text-sm pb-2 flex-1",children:[(0,a.jsxs)("div",{className:"py-2 flex items-center justify-between",children:[(0,a.jsxs)("div",{className:"flex items-center text-gray-600",children:[(0,a.jsx)(C.QT,{className:"w-4 h-4 mr-2 text-gray-500"}),(0,a.jsx)("span",{children:"Clusters (Running / Total)"})]}),(0,a.jsx)("span",{className:"font-normal text-gray-800",children:$?"...":"".concat(K.runningClusterCount," / ").concat(K.totalClusterCount)})]}),(0,a.jsxs)("div",{className:"py-2 flex items-center justify-between border-t border-gray-100",children:[(0,a.jsxs)("div",{className:"flex items-center text-gray-600",children:[(0,a.jsx)(C.Vp,{className:"w-4 h-4 mr-2 text-gray-500"}),(0,a.jsx)("span",{children:"Managed Jobs"})]}),(0,a.jsx)("span",{className:"font-normal text-gray-800",children:$?"...":K.managedJobsCount})]})]}),(0,a.jsxs)("div",{className:"px-6 pb-6 text-sm pt-3",children:[(0,a.jsx)("h4",{className:"mb-2 text-xs text-gray-500 tracking-wider",children:"Enabled Infra"}),(0,a.jsx)("div",{className:"flex flex-wrap gap-x-4 gap-y-1",children:$?(0,a.jsx)("span",{className:"text-gray-500",children:"Loading..."}):K.clouds.length>0?K.clouds.map(e=>(0,a.jsxs)("div",{className:"flex items-center text-gray-700",children:[(0,a.jsx)(C.Ye,{className:"w-3.5 h-3.5 mr-1.5 text-green-500"}),(0,a.jsx)("span",{children:e})]},e)):(0,a.jsx)("span",{className:"text-gray-500 italic",children:"No enabled infrastructure"})}),(0,a.jsx)("div",{className:"mt-4",children:(0,a.jsx)(A,{workspaceName:s,config:b,enabledClouds:K.clouds})}),(0,a.jsx)(P,{workspaceConfig:b,allUsers:X})]})]})}),(0,a.jsx)("div",{className:r?"lg:col-span-3":"lg:col-span-2",children:(0,a.jsxs)(m.Zb,{className:"h-full flex flex-col",children:[(0,a.jsx)(m.Ol,{children:(0,a.jsx)(m.ll,{className:"text-base font-normal",children:r?"New Workspace YAML":"Edit Workspace YAML"})}),(0,a.jsx)(m.aY,{className:"flex-1 flex flex-col",children:(0,a.jsxs)("div",{className:"space-y-4 flex-1 flex flex-col",children:[F&&(0,a.jsx)(L.X,{error:F,onDismiss:()=>H(null)}),(0,a.jsxs)("div",{className:"flex-1 flex flex-col",children:[(0,a.jsxs)("p",{className:"text-sm text-gray-600 mb-3",children:["Configure infra-specific settings for this workspace. Leave empty to use all accessible infrastructure. Refer to"," ",(0,a.jsx)("a",{href:"https://docs.skypilot.co/en/latest/admin/workspaces.html#configuration",target:"_blank",rel:"noopener noreferrer",className:"text-blue-600",children:"SkyPilot Docs"})," ","for more details."]}),(0,a.jsxs)("div",{className:"mb-4",children:[(0,a.jsx)("h4",{className:"text-sm font-medium text-gray-700 mb-2",children:"Example configuration:"}),(0,a.jsx)("div",{className:"p-3 bg-gray-50 border rounded-lg",children:(0,a.jsx)("pre",{className:"text-xs font-mono text-gray-600 whitespace-pre-wrap",children:"".concat(s||"my-workspace",":\n private: true\n allowed_users:\n - user1@mydomain.com\n - user2@mydomain.com\n gcp:\n project_id: xxx\n disabled: false\n kubernetes:\n allowed_contexts:\n - context-1")})})]}),(0,a.jsx)(f.g,{value:k,onChange:e=>ea(e.target.value),className:"font-mono text-sm flex-1 resize-none",style:{minHeight:"350px"},spellCheck:!1,placeholder:"# Enter workspace configuration in YAML format"}),(0,a.jsx)("div",{className:"flex justify-end space-x-3 pt-3 border-gray-200",children:(0,a.jsxs)(h.z,{onClick:el,disabled:z||F||R,className:"inline-flex items-center bg-sky-600 hover:bg-sky-700 text-white",children:[(0,a.jsx)(N.Z,{className:"w-4 h-4 mr-1.5"}),z?"Applying...":"Apply"]})})]})]})})]})})]})]}),(0,a.jsx)(v.Vq,{open:G.showDialog,onOpenChange:en,children:(0,a.jsxs)(v.cZ,{className:"sm:max-w-md",children:[(0,a.jsxs)(v.fK,{className:"",children:[(0,a.jsx)(v.$N,{children:"Delete Workspace"}),(0,a.jsxs)(v.Be,{children:['Are you sure you want to delete workspace "',s,'"? This action cannot be undone.']})]}),G.error&&(0,a.jsx)(L.X,{error:G.error,title:"Deletion Failed",onDismiss:()=>q(e=>({...e,error:null}))}),(0,a.jsxs)(v.cN,{className:"",children:[(0,a.jsx)(h.z,{variant:"outline",onClick:en,disabled:G.deleting,children:"Cancel"}),(0,a.jsx)(h.z,{variant:"destructive",onClick:et,disabled:G.deleting,children:G.deleting?"Deleting...":"Delete"})]})]})})]})]})}}}]);
|
|
11
|
+
*/let a=(0,r(998).Z)("Trash",[["path",{d:"M3 6h18",key:"d0wm0j"}],["path",{d:"M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6",key:"4alrt4"}],["path",{d:"M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2",key:"v07s0e"}]])},1812:function(e,s,r){r.d(s,{X:function(){return n}});var a=r(5893),l=r(7294);let t=e=>{if(!(null==e?void 0:e.message))return"An unexpected error occurred.";let s=e.message;return s.includes("failed:")&&(s=s.split("failed:")[1].trim()),s},n=e=>{let{error:s,title:r="Error",onDismiss:n}=e,[c,i]=(0,l.useState)(!1);if((0,l.useEffect)(()=>{s&&i(!1)},[s]),!s||c)return null;let o="string"==typeof s?s:t(s);return(0,a.jsx)("div",{className:"bg-red-50 border border-red-200 rounded-md p-3 mb-4",children:(0,a.jsxs)("div",{className:"flex items-center justify-between",children:[(0,a.jsxs)("div",{className:"flex",children:[(0,a.jsx)("div",{className:"flex-shrink-0",children:(0,a.jsx)("svg",{className:"h-5 w-5 text-red-400",viewBox:"0 0 20 20",fill:"currentColor",children:(0,a.jsx)("path",{fillRule:"evenodd",d:"M10 18a8 8 0 100-16 8 8 0 000 16zM8.707 7.293a1 1 0 00-1.414 1.414L8.586 10l-1.293 1.293a1 1 0 101.414 1.414L10 11.414l1.293 1.293a1 1 0 001.414-1.414L11.414 10l1.293-1.293a1 1 0 00-1.414-1.414L10 8.586 8.707 7.293z",clipRule:"evenodd"})})}),(0,a.jsx)("div",{className:"ml-3",children:(0,a.jsxs)("div",{className:"text-sm text-red-800",children:[(0,a.jsxs)("strong",{children:[r,":"]})," ",o]})})]}),(0,a.jsx)("button",{onClick:()=>{i(!0),n&&n()},className:"flex-shrink-0 ml-4 text-red-400 hover:text-red-600 focus:outline-none focus:ring-2 focus:ring-red-500 focus:ring-offset-2 focus:ring-offset-red-50 rounded","aria-label":"Dismiss error",children:(0,a.jsx)("svg",{className:"h-4 w-4",viewBox:"0 0 20 20",fill:"currentColor",children:(0,a.jsx)("path",{fillRule:"evenodd",d:"M4.293 4.293a1 1 0 011.414 0L10 8.586l4.293-4.293a1 1 0 111.414 1.414L11.414 10l4.293 4.293a1 1 0 01-1.414 1.414L10 11.414l-4.293 4.293a1 1 0 01-1.414-1.414L8.586 10 4.293 5.707a1 1 0 010-1.414z",clipRule:"evenodd"})})})]})})}},9123:function(e,s,r){r.d(s,{g:function(){return n}});var a=r(5893),l=r(7294),t=r(2350);let n=l.forwardRef((e,s)=>{let{className:r,...l}=e;return(0,a.jsx)("textarea",{className:(0,t.cn)("flex min-h-[80px] w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50",r),ref:s,...l})});n.displayName="Textarea"},1141:function(e,s,r){r.r(s),r.d(s,{WorkspaceEditor:function(){return R}});var a=r(5893),l=r(7294),t=r(1163),n=r(7324),c=r(3266),i=r(8969);r(6135);var o=r(1664),d=r.n(o),u=r(9008),x=r.n(u),m=r(7673),h=r(803),f=r(9123),g=r(5739),p=r(282),b=r(6021),j=r(3626),y=r(8418),N=r(9333),v=r(326);let w=e=>{let{className:s="",variant:r="default",children:l,...t}=e;return(0,a.jsx)("div",{role:"alert",className:"".concat("relative w-full rounded-lg border p-4 flex items-start space-x-2"," ").concat({default:"bg-blue-50 border-blue-200 text-blue-800",destructive:"bg-red-50 border-red-200 text-red-800"}[r]," ").concat(s),...t,children:l})},k=e=>{let{className:s="",children:r,...l}=e;return(0,a.jsx)("div",{className:"text-sm leading-relaxed ".concat(s),...l,children:r})};var C=r(3850),L=r(1812),S=r(938),E=r(1272),Z=r(3225),D=r(3081);let M=e=>{let{message:s}=e;return s?(0,a.jsxs)(w,{className:"border-green-200 bg-green-50",children:[(0,a.jsx)(p.Z,{className:"h-4 w-4 text-green-600"}),(0,a.jsx)(k,{className:"text-green-800",children:s})]}):null},A=e=>{let{workspaceName:s,config:r,enabledClouds:l=[]}=e;if(!r)return null;let t="default"===s,n=0===Object.keys(r).length;if(t&&n)return(0,a.jsx)("div",{className:"text-sm text-gray-500 mb-3 italic p-3 bg-sky-50 rounded border border-sky-200",children:"Workspace 'default' can use all accessible infrastructure."});let c=[],i=[],o=[],d=new Set(l.map(e=>e.toLowerCase()));Object.entries(r).forEach(e=>{let[s,r]=e;if("private"===s||"allowed_users"===s)return;let l=Z.Z2[s.toLowerCase()]||s.toUpperCase(),t=d.has(null==l?void 0:l.toLowerCase());if((null==r?void 0:r.disabled)===!0)i.push(l);else if(r&&Object.keys(r).length>0){let e="";"gcp"===s.toLowerCase()&&r.project_id?e=" (Project ID: ".concat(r.project_id,")"):"aws"===s.toLowerCase()&&r.region&&(e=" (Region: ".concat(r.region,")")),t?c.push((0,a.jsxs)("span",{className:"block",children:[l,e," is enabled."]},"".concat(s,"-enabled"))):o.push((0,a.jsxs)("span",{className:"block text-amber-700",children:[l,e," is configured but not currently available."]},"".concat(s,"-configured-not-enabled")))}else t?c.push((0,a.jsxs)("span",{className:"block",children:[l," is enabled (using default settings)."]},"".concat(s,"-default-enabled"))):o.push((0,a.jsxs)("span",{className:"block text-amber-700",children:[l," is configured but not currently available."]},"".concat(s,"-default-not-enabled")))});let u=[];if(i.length>0){let e=i.join(" and ");u.push((0,a.jsxs)("span",{className:"block",children:[e," ",1===i.length?"is":"are"," explicitly disabled."]},"disabled-clouds"))}return(u.push(...c),u.push(...o),u.length>0)?(0,a.jsx)("div",{className:"text-sm text-gray-700 mb-3 p-3 bg-sky-50 rounded border border-sky-200",children:u}):!t&&n?(0,a.jsx)("div",{className:"text-sm text-gray-500 mb-3 italic p-3 bg-sky-50 rounded border border-sky-200",children:"This workspace has no specific cloud resource configurations and can use all accessible infrastructure."}):null},W=e=>{let{isPrivate:s}=e;return s?(0,a.jsx)("span",{className:"inline-flex items-center px-2 py-1 rounded-full text-xs font-medium bg-gray-100 text-gray-700 border border-gray-300",children:"Private"}):(0,a.jsx)("span",{className:"inline-flex items-center px-2 py-1 rounded-full text-xs font-medium bg-green-100 text-green-700 border border-green-300",children:"Public"})},P=e=>{let{workspaceConfig:s,allUsers:r}=e;if(!s.private)return null;let l=s.allowed_users||[],t=(r||[]).filter(e=>"admin"===e.role).map(e=>e.username),n=[...new Set([...l,...t])];return 0===n.length?(0,a.jsxs)("div",{className:"mt-4",children:[(0,a.jsx)("h4",{className:"mb-2 text-xs text-gray-500 tracking-wider",children:"Allowed Users (0)"}),(0,a.jsx)("div",{className:"text-amber-600 text-xs italic p-2 bg-amber-50 rounded border border-amber-200",children:"No users configured (workspace may be inaccessible)"})]}):(0,a.jsxs)("div",{className:"mt-4",children:[(0,a.jsxs)("h4",{className:"mb-2 text-xs text-gray-500 tracking-wider",children:["Allowed Users (",n.length,")"]}),(0,a.jsx)("div",{className:"space-y-1 max-h-48 overflow-y-auto border border-gray-200 rounded",children:n.map(e=>{let s=t.includes(e);return(0,a.jsxs)("div",{className:"flex items-center justify-between text-xs p-2 bg-gray-50 hover:bg-gray-100 border-b border-gray-100 last:border-b-0",children:[(0,a.jsx)("span",{className:"font-medium text-gray-700",children:e}),s?(0,a.jsxs)("span",{className:"inline-flex items-center text-blue-600",children:[(0,a.jsx)(C.r7,{className:"w-3 h-3 mr-1"}),"Admin"]}):(0,a.jsxs)("span",{className:"inline-flex items-center text-gray-600",children:[(0,a.jsx)(b.Z,{className:"w-3 h-3 mr-1"}),"User"]})]},e)})})]})};function R(e){let{workspaceName:s,isNewWorkspace:r=!1}=e,o=(0,t.useRouter)(),[u,p]=(0,l.useState)({}),[b,w]=(0,l.useState)({}),[k,Z]=(0,l.useState)(""),[R,_]=(0,l.useState)(!0),[z,O]=(0,l.useState)(!1),[T,U]=(0,l.useState)(!1),[Y,J]=(0,l.useState)(null),[I,V]=(0,l.useState)(null),[F,H]=(0,l.useState)(null),[X,B]=(0,l.useState)([]),[G,q]=(0,l.useState)({showDialog:!1,deleting:!1,error:null}),[K,Q]=(0,l.useState)({totalClusterCount:0,runningClusterCount:0,managedJobsCount:0,clouds:[]}),[$,ee]=(0,l.useState)(!1),es=(0,l.useCallback)(async()=>{_(!0),J(null);try{let e;let[r,a]=await Promise.all([(0,n.fX)(),(0,D.R)()]),l=r[s]||{};p(l),w(l),B(a||[]),e=0===Object.keys(l).length?"".concat(s,":\n # Empty workspace configuration - uses all accessible infrastructure\n"):E.ZP.dump({[s]:l},{indent:2,lineWidth:-1,noRefs:!0,skipInvalid:!0,flowLevel:-1}),Z(e)}catch(e){console.error("Error fetching workspace config:",e),J(e)}finally{_(!1)}},[s]),er=(0,l.useCallback)(async()=>{if(!r){ee(!0);try{let[e,r,a]=await Promise.all([(0,c.getClusters)(),(0,i.getManagedJobs)(),(0,n.yz)(s,!0)]),l=e.filter(e=>(e.workspace||"default")===s),t=l.filter(e=>"RUNNING"===e.status||"LAUNCHING"===e.status),o={};e.forEach(e=>{o[e.cluster]=e.workspace||"default"});let d=r.jobs||[],u=new Set(S.statusGroups.active),x=0;d.forEach(e=>{let r=e.cluster_name||e.resources&&e.resources.cluster_name;r&&o[r]===s&&u.has(e.status)&&x++}),Q({totalClusterCount:l.length,runningClusterCount:t.length,managedJobsCount:x,clouds:Array.isArray(a)?a:[]})}catch(e){console.error("Failed to fetch workspace stats:",e)}finally{ee(!1)}}},[s,r]);(0,l.useEffect)(()=>{r?(_(!1),Z("".concat(s,":\n # New workspace configuration\n # Leave empty to use all accessible infrastructure\n"))):(es(),er())},[s,r,es,er]),(0,l.useEffect)(()=>{U(JSON.stringify(u)!==JSON.stringify(b))},[u,b]);let ea=e=>{Z(e),H(null);try{let r=E.ZP.load(e)||{},a=Object.keys(r);if(0===a.length)p({});else if(1===a.length){let e=a[0];if(e!==s){H('Workspace name cannot be changed. Expected "'.concat(s,'" but found "').concat(e,'".'));return}let l=r[s]||{};p(l)}else H("Configuration must contain only one workspace. Found: ".concat(a.join(", ")))}catch(e){H("Invalid YAML: ".concat(e.message))}},el=async()=>{O(!0),J(null),V(null);try{if(F)throw Error("Please fix YAML errors before saving");let e=E.ZP.load(k)||{},a=Object.keys(e);if(a.length>0&&a[0]!==s)throw Error('Workspace name cannot be changed. Expected "'.concat(s,'".'));r?(await (0,n.MB)(s,u),V("Workspace created successfully!"),setTimeout(()=>{o.push("/workspaces/".concat(s))},1500)):(await (0,n.eA)(s,u),V("Workspace updated successfully!"),w(u),er())}catch(e){console.error("Error saving workspace:",e),J(e)}finally{O(!1)}},et=async()=>{q(e=>({...e,deleting:!0,error:null}));try{await (0,n.zl)(s),V("Workspace deleted successfully!"),setTimeout(()=>{o.push("/workspaces")},1500)}catch(e){console.error("Error deleting workspace:",e),q(s=>({...s,deleting:!1,error:e}))}},en=()=>{q({showDialog:!1,deleting:!1,error:null})},ec=async()=>{await Promise.all([es(),er()])};if(!o.isReady)return(0,a.jsx)("div",{children:"Loading..."});let ei=r?"Create New Workspace | SkyPilot Dashboard":"Workspace: ".concat(s," | SkyPilot Dashboard");return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(x(),{children:(0,a.jsx)("title",{children:ei})}),(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)("div",{className:"flex items-center justify-between mb-4 h-5",children:[(0,a.jsxs)("div",{className:"text-base flex items-center",children:[(0,a.jsx)(d(),{href:"/workspaces",className:"text-sky-blue hover:underline",children:"Workspaces"}),(0,a.jsx)("span",{className:"mx-2 text-gray-500",children:"›"}),(0,a.jsx)(d(),{href:r?"/workspace/new":"/workspaces/".concat(s),className:"text-sky-blue hover:underline",children:r?"New Workspace":s}),T&&(0,a.jsx)("span",{className:"ml-3 px-2 py-1 bg-yellow-100 text-yellow-800 text-xs rounded",children:"Unsaved changes"})]}),(0,a.jsxs)("div",{className:"text-sm flex items-center",children:[(R||z||$)&&(0,a.jsxs)("div",{className:"flex items-center mr-4",children:[(0,a.jsx)(g.Z,{size:15,className:"mt-0"}),(0,a.jsx)("span",{className:"ml-2 text-gray-500",children:z?"Saving...":"Loading..."})]}),(0,a.jsxs)("div",{className:"flex items-center space-x-4",children:[!r&&(0,a.jsxs)("button",{onClick:ec,disabled:R||z||$,className:"text-sky-blue hover:text-sky-blue-bright font-medium inline-flex items-center",children:[(0,a.jsx)(j.Z,{className:"w-4 h-4 mr-1.5"}),"Refresh"]}),!r&&"default"!==s&&(0,a.jsxs)("button",{onClick:()=>q({...G,showDialog:!0}),disabled:G.deleting||z,className:"text-red-600 hover:text-red-700 font-medium inline-flex items-center",children:[(0,a.jsx)(y.Z,{className:"w-4 h-4 mr-1.5"}),"Delete"]})]})]})]}),R?(0,a.jsxs)("div",{className:"flex justify-center items-center py-12",children:[(0,a.jsx)(g.Z,{size:24,className:"mr-2"}),(0,a.jsx)("span",{className:"text-gray-500",children:"Loading workspace configuration..."})]}):(0,a.jsxs)("div",{className:"space-y-6",children:[(0,a.jsx)(L.X,{error:Y,title:"Error",onDismiss:()=>J(null)}),(0,a.jsx)(M,{message:I}),(0,a.jsxs)("div",{className:"grid grid-cols-1 lg:grid-cols-3 gap-6",children:[!r&&(0,a.jsx)("div",{className:"lg:col-span-1",children:(0,a.jsxs)(m.Zb,{className:"h-full",children:[(0,a.jsx)(m.Ol,{children:(0,a.jsx)(m.ll,{className:"text-base font-normal",children:(0,a.jsxs)("div",{className:"flex items-center justify-between",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("span",{className:"font-semibold",children:"Workspace:"})," ",s]}),(0,a.jsx)(W,{isPrivate:!0===b.private})]})})}),(0,a.jsxs)(m.aY,{className:"text-sm pb-2 flex-1",children:[(0,a.jsxs)("div",{className:"py-2 flex items-center justify-between",children:[(0,a.jsxs)("div",{className:"flex items-center text-gray-600",children:[(0,a.jsx)(C.QT,{className:"w-4 h-4 mr-2 text-gray-500"}),(0,a.jsx)("span",{children:"Clusters (Running / Total)"})]}),(0,a.jsx)("span",{className:"font-normal text-gray-800",children:$?"...":"".concat(K.runningClusterCount," / ").concat(K.totalClusterCount)})]}),(0,a.jsxs)("div",{className:"py-2 flex items-center justify-between border-t border-gray-100",children:[(0,a.jsxs)("div",{className:"flex items-center text-gray-600",children:[(0,a.jsx)(C.Vp,{className:"w-4 h-4 mr-2 text-gray-500"}),(0,a.jsx)("span",{children:"Managed Jobs"})]}),(0,a.jsx)("span",{className:"font-normal text-gray-800",children:$?"...":K.managedJobsCount})]})]}),(0,a.jsxs)("div",{className:"px-6 pb-6 text-sm pt-3",children:[(0,a.jsx)("h4",{className:"mb-2 text-xs text-gray-500 tracking-wider",children:"Enabled Infra"}),(0,a.jsx)("div",{className:"flex flex-wrap gap-x-4 gap-y-1",children:$?(0,a.jsx)("span",{className:"text-gray-500",children:"Loading..."}):K.clouds.length>0?K.clouds.map(e=>(0,a.jsxs)("div",{className:"flex items-center text-gray-700",children:[(0,a.jsx)(C.Ye,{className:"w-3.5 h-3.5 mr-1.5 text-green-500"}),(0,a.jsx)("span",{children:e})]},e)):(0,a.jsx)("span",{className:"text-gray-500 italic",children:"No enabled infrastructure"})}),(0,a.jsx)("div",{className:"mt-4",children:(0,a.jsx)(A,{workspaceName:s,config:b,enabledClouds:K.clouds})}),(0,a.jsx)(P,{workspaceConfig:b,allUsers:X})]})]})}),(0,a.jsx)("div",{className:r?"lg:col-span-3":"lg:col-span-2",children:(0,a.jsxs)(m.Zb,{className:"h-full flex flex-col",children:[(0,a.jsx)(m.Ol,{children:(0,a.jsx)(m.ll,{className:"text-base font-normal",children:r?"New Workspace YAML":"Edit Workspace YAML"})}),(0,a.jsx)(m.aY,{className:"flex-1 flex flex-col",children:(0,a.jsxs)("div",{className:"space-y-4 flex-1 flex flex-col",children:[F&&(0,a.jsx)(L.X,{error:F,onDismiss:()=>H(null)}),(0,a.jsxs)("div",{className:"flex-1 flex flex-col",children:[(0,a.jsxs)("p",{className:"text-sm text-gray-600 mb-3",children:["Configure infra-specific settings for this workspace. Leave empty to use all accessible infrastructure. Refer to"," ",(0,a.jsx)("a",{href:"https://docs.skypilot.co/en/latest/admin/workspaces.html#configuration",target:"_blank",rel:"noopener noreferrer",className:"text-blue-600",children:"SkyPilot Docs"})," ","for more details."]}),(0,a.jsxs)("div",{className:"mb-4",children:[(0,a.jsx)("h4",{className:"text-sm font-medium text-gray-700 mb-2",children:"Example configuration:"}),(0,a.jsx)("div",{className:"p-3 bg-gray-50 border rounded-lg",children:(0,a.jsx)("pre",{className:"text-xs font-mono text-gray-600 whitespace-pre-wrap",children:"".concat(s||"my-workspace",":\n private: true\n allowed_users:\n - user1@mydomain.com\n - user2@mydomain.com\n gcp:\n project_id: xxx\n disabled: false\n kubernetes:\n allowed_contexts:\n - context-1")})})]}),(0,a.jsx)(f.g,{value:k,onChange:e=>ea(e.target.value),className:"font-mono text-sm flex-1 resize-none",style:{minHeight:"350px"},spellCheck:!1,placeholder:"# Enter workspace configuration in YAML format"}),(0,a.jsx)("div",{className:"flex justify-end space-x-3 pt-3 border-gray-200",children:(0,a.jsxs)(h.z,{onClick:el,disabled:z||F||R,className:"inline-flex items-center bg-sky-600 hover:bg-sky-700 text-white",children:[(0,a.jsx)(N.Z,{className:"w-4 h-4 mr-1.5"}),z?"Applying...":"Apply"]})})]})]})})]})})]})]}),(0,a.jsx)(v.Vq,{open:G.showDialog,onOpenChange:en,children:(0,a.jsxs)(v.cZ,{className:"sm:max-w-md",children:[(0,a.jsxs)(v.fK,{className:"",children:[(0,a.jsx)(v.$N,{children:"Delete Workspace"}),(0,a.jsxs)(v.Be,{children:['Are you sure you want to delete workspace "',s,'"? This action cannot be undone.']})]}),G.error&&(0,a.jsx)(L.X,{error:G.error,title:"Deletion Failed",onDismiss:()=>q(e=>({...e,error:null}))}),(0,a.jsxs)(v.cN,{className:"",children:[(0,a.jsx)(h.z,{variant:"outline",onClick:en,disabled:G.deleting,children:"Cancel"}),(0,a.jsx)(h.z,{variant:"destructive",onClick:et,disabled:G.deleting,children:G.deleting?"Deleting...":"Delete"})]})]})})]})]})}}}]);
|