* Harden Tauri backend preflight and startup
Require managed Studio root IDs to match before attaching to existing backends, close the concurrent backend-start window, and tighten frontend Tauri detection to Tauri-specific signals.
* Add Tauri backend manageability guards
Gate desktop backend compatibility on explicit manageability fields, add external-conflict handling for unsafe backend states, and protect update/repair paths from mutating active non-owned Studio backends. Track Tauri-owned backends with local owner metadata for verified orphan cleanup only.
* Split Tauri preflight probes into modules
Move preflight types, version checks, managed install probing, and backend probing into focused submodules while preserving behavior and keeping implementation files under the release-readiness size target.
* Use desktop-specific Tauri updater channel
Point the desktop updater at a same-repo desktop-latest manifest and publish that channel from non-draft desktop releases after validating the Tauri-generated latest.json.
* Add Linux desktop update policy
* Add owned backend lifecycle guards
* Adopt verified desktop-owned backends
* Validate desktop backend readiness
* Trim Tauri release hardening code
* Require desktop backend 2026.5.3
* Handle desktop backend edge cases
* Fail stalled desktop backend startup
* Fix desktop update edge cases
* Avoid secret-gating adopted watchdog
* Fix desktop update comparison guards
* Automate desktop release versioning
* Serialize desktop release workflow
* tests: follow preflight.rs split into preflight/{backend,managed,types,version}.rs
PR #5341 splits studio/src-tauri/src/preflight.rs into a directory of
submodules. The cmd.env_remove("UNSLOTH_STUDIO_HOME") + STUDIO_HOME
calls now live in preflight/managed.rs instead of preflight.rs, so
test_tauri_preflight_scrubs_studio_home_env counted zero matches in
the old single-file location and failed with "assert 0 >= 2".
Read whichever shape is on disk: preflight.rs at the old path plus
every *.rs under preflight/ (current PR has 2 occurrences in
preflight/managed.rs). The guard intent is unchanged: at least 2
env_remove calls covering run_cli_probe and probe_cli_capability,
plus the single commands.rs scrub in check_install_status. Verified
locally: pytest tests/test_studio_install_workspace_guard.py::test_tauri_preflight_scrubs_studio_home_env passes.
* [pre-commit.ci] auto fixes from pre-commit.com hooks
for more information, see https://pre-commit.ci
* Avoid browser Tauri hostname detection
* Restore shutdown flag after failed stop
---------
Co-authored-by: Daniel Han <danielhanchen@gmail.com>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
80 lines
2.4 KiB
JSON
80 lines
2.4 KiB
JSON
{
|
|
"productName": "Unsloth Studio (Desktop)",
|
|
"identifier": "ai.unsloth.studio",
|
|
"build": {
|
|
"beforeDevCommand": {
|
|
"cwd": "../frontend",
|
|
"script": "npm run dev -- --port 5173 --strictPort"
|
|
},
|
|
"beforeBuildCommand": {
|
|
"cwd": "../frontend",
|
|
"script": "npm run build"
|
|
},
|
|
"frontendDist": "../frontend/dist",
|
|
"devUrl": "http://localhost:5173"
|
|
},
|
|
"app": {
|
|
"withGlobalTauri": true,
|
|
"security": {
|
|
"csp": "default-src 'self'; connect-src 'self' http://localhost:* ws://localhost:* ws://127.0.0.1:* http://127.0.0.1:* https://huggingface.co https://*.huggingface.co https://datasets-server.huggingface.co; img-src 'self' data: https:; style-src 'self' 'unsafe-inline'; font-src 'self' data:"
|
|
},
|
|
"windows": [
|
|
{
|
|
"label": "main",
|
|
"title": "Unsloth Studio (Desktop)",
|
|
"width": 690,
|
|
"height": 480,
|
|
"center": true,
|
|
"visible": false,
|
|
"resizable": false
|
|
}
|
|
]
|
|
},
|
|
"plugins": {
|
|
"updater": {
|
|
"pubkey": "dW50cnVzdGVkIGNvbW1lbnQ6IG1pbmlzaWduIHB1YmxpYyBrZXk6IEQ2RDhGMDMzNDNEMTlGMkQKUldRdG45RkRNL0RZMXZsaVo2TElUQlVHb1hVNWEyajhUOGFXeTdNVDFZTFdBVUtlZUh5L2wwWVYK",
|
|
"endpoints": [
|
|
"https://github.com/unslothai/unsloth/releases/download/desktop-latest/latest.json"
|
|
],
|
|
"windows": {
|
|
"installMode": "passive"
|
|
}
|
|
}
|
|
},
|
|
"bundle": {
|
|
"active": true,
|
|
"createUpdaterArtifacts": true,
|
|
"publisher": "Unsloth AI",
|
|
"homepage": "https://unsloth.ai/",
|
|
"copyright": "© 2026 Unsloth AI. All rights reserved.",
|
|
"license": "AGPL-3.0-only",
|
|
"targets": ["app", "appimage", "deb", "dmg", "nsis"],
|
|
"resources": {
|
|
"../../install.sh": "install.sh",
|
|
"../../install.ps1": "install.ps1"
|
|
},
|
|
"icon": [
|
|
"icons/32x32.png",
|
|
"icons/128x128.png",
|
|
"icons/icon.ico",
|
|
"icons/icon.icns"
|
|
],
|
|
"windows": {
|
|
"nsis": {
|
|
"installerHooks": "./windows/hooks.nsh",
|
|
"template": "./windows/installer.nsi",
|
|
"installerIcon": "./icons/icon.ico",
|
|
"headerImage": "./windows/branding/nsis-header.bmp",
|
|
"sidebarImage": "./windows/branding/nsis-sidebar.bmp",
|
|
"installMode": "currentUser",
|
|
"languages": ["English"],
|
|
"displayLanguageSelector": false
|
|
}
|
|
},
|
|
"linux": {
|
|
"deb": {
|
|
"postRemoveScript": "./linux/postremove.sh"
|
|
}
|
|
}
|
|
}
|
|
}
|