* Studio desktop: fix loading-toast overlap and typing lag on model load - Toaster: on desktop, offset toasts below the ~34px custom window titlebar (top 46 when isTauri) so they no longer cover the min/max/close controls. Web is unchanged (top 12). - Model load: the 2s load poll wrote loadProgress state every tick, which re-renders the whole chat page during "Starting model" (cheap in Chrome, janky in the desktop WebView2 -> laggy typing). That state is only read by the dismissed-toast inline status, so gate all four poll branches to write it only when the inline view is live; while the toast is up it updates via Sonner alone. * Studio desktop: fix HTML canvas preview, download, and panel offset - CSP: add frame-src for localhost/127.0.0.1 so the desktop webview can frame the backend-served artifact preview. default-src 'self' (no frame-src) blocked it -> "127.0.0.1 refused to connect"; web is same-origin so it already worked. - Download: route the canvas Download button through the native save dialog (downloadFile) instead of a blob-anchor click, which the Tauri WebView2 silently drops. - Nudge the artifact panel down 8px so its top edge/shadow isn't tucked under the window top bar. * Studio desktop: add HTML filter for native canvas save dialog Canvas Download saves .html via save_native_file, but save_filter() had no html/htm case, so the native dialog fell back to the JSON/CSV/etc filter and could block saving/browsing the .html export. Add an HTML filter and include html/htm in the catch-all. Addresses Codex review on #7391. * Studio desktop: unblock canvas preview in dev shell + clear header fade - Preview: the app CSP frame-src fix wasn't enough in the tauri dev shell. The preview endpoint sets its own frame-ancestors response header, which only allowed 'self' tauri://localhost http://tauri.localhost -- so the Vite dev origin (http://localhost:5173) was blocked and the frame stayed "refused to connect". Extend the allowlist with http://localhost:* and http://127.0.0.1:* (the endpoint only renders postMessage'd HTML in a no-same-origin sandbox, so it exposes no server resource). - Shadow: the artifact panel toolbar sat under the full-width chat-header-fade; lower the panel top (mt 80->90px) so the controls clear the fade. * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
87 lines
2.7 KiB
JSON
87 lines
2.7 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: blob: https:; media-src 'self' data: blob: https:; style-src 'self' 'unsafe-inline'; font-src 'self' data:; frame-src 'self' http://localhost:* http://127.0.0.1:*"
|
|
},
|
|
"windows": [
|
|
{
|
|
"label": "main",
|
|
"title": "Unsloth Studio (Desktop)",
|
|
"width": 760,
|
|
"height": 560,
|
|
"center": true,
|
|
"visible": false,
|
|
"resizable": false,
|
|
"decorations": true,
|
|
"titleBarStyle": "Overlay",
|
|
"trafficLightPosition": { "x": 14, "y": 24 },
|
|
"hiddenTitle": true
|
|
}
|
|
]
|
|
},
|
|
"plugins": {
|
|
"updater": {
|
|
"pubkey": "dW50cnVzdGVkIGNvbW1lbnQ6IG1pbmlzaWduIHB1YmxpYyBrZXk6IDE0NjlBNkEwQTc0QjY0Q0UKUldUT1pFdW5vS1pwRkl3TXRrOGlYdDNMeTh1bEhSbURrM3IyT2lTK1BiekpTc0Z2SXZFeVNibDIK",
|
|
"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": {
|
|
"appimage": {
|
|
"bundleMediaFramework": false
|
|
},
|
|
"deb": {
|
|
"postRemoveScript": "./linux/postremove.sh"
|
|
}
|
|
}
|
|
}
|
|
}
|